一般情况下,C语言中的数组名代表着首元素的地址,如下图代码运行结果所示:
int main() {
int arr[10] = { 0 };
printf("%p\n", arr);
printf("%p\n", &arr[0]);
return 0;
}
运行结果为:
但是,数组名代表首元素地址的情况有两个例外:
(1)sizeof(数组名):? 数组名表示整个数组-计算的是整个数组的大小,单位是字节
? 但在某函数中接收传入的形参数组时,sizeof(形参数组)计算的是数组首地址元素的大小,?这一块具体可查看博主的相关博客C中关于能否在函数中求传入整型数组长度的问题。
(2)&数组名? : 数组名表示整个数组 - 取出的是整个数组的地址(虽然与数组首元素地址一样,但意义不同)
如下图代码运行结果所示:
int main() {
int arr[10] = { 0 };
printf("%p\n", &arr);
printf("%p\n", &arr+1);
printf("%p\n", arr);
printf("%p\n", arr+1);
return 0;
}
运行结果为:
F8-D0=28(16进制),28转换为十进制为40(为数组中所有元素的大小)
D4-D0=4(16进制),4转换为十进制为4(为一个元素的大小)
所以虽然&arr(数组的地址)和arr(数组首元素的地址)值相同,但代表的意义不同
以上内容为C中数组名代表首元素地址的两个例外。