黑马程序员技术交流社区
标题:
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