代码:
int arr[2] = {1,2};
printf("arr的地址:%p\n",arr);
printf("&arr的地址:%p\n",&arr);
printf("arr+1的地址:%p\n",arr + 1);
printf("&arr+1的地址:%p\n",&arr + 1);
警告信息如下:
打印结果:
由警告信息可知:
&arr、&arr + 1指针类型都为int(*)[2],意为指向int[2]数组的指针;&arr、&arr + 1的地址相差8个字节,正好是sizeof(arr),数组的地址是连续的,那么&arr + 1已经指向了数组结尾的下一个空间地址。arr、arr+1分别指向数组的第一个和第二个元素的地址;arr与&arr地址相同,说明指向数组的指针的地址跟数组第一个元素的地址相同。
总结:除了sizeof(arr)、&arr这两个地方arr代表整个数组之外,其它arr代表的都是数组第一个元素的地址,是一个常量。