先看一段代码
#include <stdio.h>
int main(){
int arr[3] = {22,3,44};
printf("arr:\t%p\n",arr);
printf("&arr:\t%p\n",&arr);
printf("arr+1:\t%p\n",arr+1);
printf("&arr[0]+1:\t%p\n",&arr[0]+1);
printf("&arr+1:\t%p\n",&arr+1);
return 0;
}
大家运行一下,结果如下
/*
arr: 0028FF30
&arr: 0028FF30
&arr[0]+1: 0028FF34
arr+1: 0028FF34
&arr+1: 0028FF3C
*/
从结果看arr 和&arr的地址是一样的,但他们加1之后却不一样,说明他们本质是不一样的。
arr就是该数组的首地址即&arr[0],加上1之后,即地址加上4,但个数组元素所占字节。
而&arr+1,却是地址加12,即整个数组所占字节。
所以&arr,其实这里的arr的意义早已经不是当初那个数组名了,它此时代表了整个数组 |
|