int main()
{
int arr[10] = {0};
printf("数组元素首地址 :%d\n",arr); //数组元素首地址 2293280
printf("数组首地址 :%d\n",&arr); //数组首地址 2293280
printf("数组元素首地址+1 :%d\n",arr+1); //数组元素首地址 2293284
printf("数组首地址+1 :%d\n",&arr+1); //数组首地址 2293320
return 0;
}
arr、arr[0]、&arr[0]和&arr区别
arr:数组名,同时也表示数组第一个元素的首字节地址,是一个常量值。arr[0]:数组一个元素,可以进行读写操作。&arr[0]:等价于arr,是一个地址常量,只能作为右值。&arr:数组首地址,其值与arr想等,但含义完全不同。&arr,是将整个数组作为一个新的数组类型,&arr就是这个类型对应内存空间的首地址。
所以,上述代码中,arr和&arr输出都为2293280,但是arr+1 输出为2293284,即在2293280基础上增加了4个字节(1×sizeof(int))。&arr+1输出为2293320,在2293280基础上增加了40个字节(10×sizeof(int))。