黑马程序员技术交流社区

标题: C语言的数组名和对数组名取地址有什么区别 [打印本页]

作者: a124113798    时间: 2015-9-2 10:52
标题: C语言的数组名和对数组名取地址有什么区别
先看一段代码
#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的意义早已经不是当初那个数组名了,它此时代表了整个数组
作者: Vigor    时间: 2015-9-2 14:23
原来是这样,之前都认为是相同的,受教了,谢谢!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2