数组名
- 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修改数据,但并不意味着原始数组必须是常量。
函数与二维数组
二维数组作为函数参数
int sum(int ar[][4],int size)
int sum(int (*ar2)[4],int size)
int (*ar2)[4]:ar2表示指向由4个int组成的数组的指针
int *ar[4]:ar表示由4个指向int的指针组成的数组。