0x01 首地址
对于首地址,其指向数组地址的开头,而其中 a 与 &a 所表达的意思是不一样的。
int a[10] = {0};
/*
* a:值为数组的首地址,类型为 int *
* &a:值为数组的首地址,类型为 int (*a)[10]
* 两者的值一样,均为数组的首地址
* 两者的类型不一样,所以 a 所表示的有效范围为 sizeof(int)
* &a 所表示的有效范围为 sizeof(int)*10
* 类型的不一使得 +1 表示的意思不一
* a+1 表示向后移动 sizeof(int) 个字节,即指针长度个字节
* &a+1 表示向后移动 sizeof(int)*10 g
*/
0x02 参数
对于数组作为参数传入函数中,会出现数组退化为指针传给函数的情况,此时如果我们在函数中使用 sizeof 计算数组长度,会无法得到正确的数组长度,因为此时计算的是指针的长度。
所以我们不要在函数内对形参的数组进行长度计算。