数组名通常表示的都是数组首元素地址
但有两个例外
1.sizeof(数组名),这里数组名表示整个数组,计算的是整个数组的大小
2.&数组名,这里的数组名表示的依然是整个数组,所以&数组名取出的是整个数组的地址
#include <stdio.h>
int main()
{
int arr[20] = { 0 };
printf("%p\n", arr);
printf("%p\n", &arr[0]);
printf("%p\n", &arr);
int sz = sizeof(arr);
printf("%d\n", sz);
//打印结果
//000000722CB6F8E0
//000000722CB6F8E0
//000000722CB6F8E0
//80
return 0;
}
#include <stdio.h>
int main()
{
int arr[20] = { 0 };
printf("%p\n", arr);
printf("%p\n", arr+1);
printf("%p\n", &arr[0]);
printf("%p\n", &arr[0]+1);
printf("%p\n", &arr);
printf("%p\n", &arr+1);
int sz = sizeof(arr);
printf("%d\n", sz);
//打印结果
//000000722CB6F8E0
//000000722CB6F8E0
//000000722CB6F8E0
//80
return 0;
}
#include <stdio.h>
int main()
{
int arr[20] = { 0 };
printf("%p\n", arr);
printf("%p\n", arr+1);
printf("%p\n", &arr[0]);
printf("%p\n", &arr[0]+1);
printf("%p\n", &arr);
printf("%p\n", &arr+1);
int sz = sizeof(arr);
printf("%d\n", sz);
//打印结果
//0000009CB131F930
//0000009CB131F934
//0000009CB131F930
//0000009CB131F934
//0000009CB131F930
//0000009CB131F980
//80
return 0;
}
根据上面的代码我们发现,其实
&arr
和
arr
,虽然值是一样的,但是意义应该不一样的。
实际上:
&arr
表示的是
数组的地址
,而不是数组首元素的地址。(细细体会一下)
本例中
&arr
的类型是:
int(*)[10]
,是一种数组指针类型
数组的地址
+1
,跳过整个数组的大小,所以
&arr+1
相对于
&arr
的差值是
80.