数组名是数组首元素地址,但是有两个例外你知道吗?
先给大家看两段代码:
先自己做一下这两道题再看答案
1
int main()
{
int arr[10] = {0};
printf("%d\n", sizeof(arr[0]));
printf("%d", sizeof(arr));
return 0;
}
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;
}
1.sizeof(数组名) — 数组名表示整个数组 — 计算的是整个数组的大小(单位是字节)
2.&数组名,表示整个数组 ---- 取出的是整个数组的地址
这里 arr+1 跳过一个 int 的大小,就是访问数组第二个元素的地址
&arr+1 跳过的是一个int arr【】的大小,就是上图中跳过 40 bit 位
数组的地址与数组首元素的地址相同