函数与数组

数组名

  1. C++将数组名解释为第一个元素的地址
    int cookies[8];
    则 cookies==&cookies[0]
    (例外:对数组名使用sizeof将得到整个数组的长度,以字节为单位;
    将地址运算符用于数组名时将返回整个数组的地址,如&cookies返回一个32字节内存块的地址)

    2.数组名做函数参数
    int sun_arr(int arr[],int n)
    int sun_arr(int *arr,int n)
    两者都是正确的,在C++中当且仅当在函数头或函数原型中int arr[]和int arr含义才相同;
    数组表示法提醒用户arr不仅指向int,还指向int数组的第一个int.
    3.将指针包括数组名加1,实际是加上了一个与指针指向的类型的长度(以字节为单位相等的值);
    arr[i]==
    (arr+i)
    &arr[i]==arr+i

将数组名作为函数参数

意味着将数组地址传递给函数;
传递常规变量时,函数使用的是变量的拷贝;
传递数组时,函数使用的是原来的数组;

函数与数组

注意

如上图所示,sizeof(cookies)==32 //表示整个数组长度
sizeof(arr)==4 //表示指针变量的长度
因此,必须显示传递数组的长度,不能使用sizeof(arr)

显示数组及对数组的保护

void show_arry(const double ar[],int n)
表明指针ar指向的是常量数据不能使用ar修改数据,但并不意味着原始数组必须是常量。