一般来说对于一个数组来说数组名代表着首元素的地址,但是有一种情况是例外就是使用sizeof(数组名)这里的数组名代表的是整个数组而不再是首元素的地址。
我们通过一个代码来仔细了解一下区别
#include<stdio.h>
int main()
{
int arr[10] = { 0 };
printf("arr的地址是%p\n", arr);//%p就是打印地址
printf("&arr的地址是%p\n", &arr);
printf("&arr[0]的地址是%p\n", &arr[0]);
return 0;
}
运行结果
我们发现这三个打印出的地址是一样的,但对于&arr和arr还是有很大区别的至于区别在哪我们看下面的这个代码。
#include<stdio.h>
int main()
{
int arr[10] = { 0 };
printf("arr的地址是%p\n", arr);
printf("arr+1的地址是%p\n", arr + 1);
printf("&arr的地址是%p\n", &arr);
printf("&arr+1的地址是%p\n", &arr+1);
return 0;
}
运行结果如图
很明显&arr+1和arr+1分别执行了不同的操作。arr+1跳过的是四个字节,而&arr+1跳过的是40个字节。那么我们就验证了&arr代表的是整个数组的地址而arr只是代表首元素的地址。
标签:arr,int,不同,数组名,地址,数组,printf From: https://blog.51cto.com/u_15838996/6085294