c语言,数组首地址的地址和首地址的内容居然是一样的,看懂了就进来看看吧

我定义了一个数组intarr[5]={0};现在我输出arr和&arrprintf("%d%d\n",arr,&arr);输出结果两个值是一样的。(vc6.0)arr表示... 我定义了一个数组

int arr[5] = {0};
现在我输出arr和&arr
printf("%d %d\n", arr, &arr); 输出结果两个值是一样的。(vc6.0)

arr表示的是数组的首地址
&arr表示的是数组的首地址的地址
arr相当于一个指针, 我现在直接用printf输出arr相当于输出了arr中储存的内容(不是输出以该内容为地址的变量),其结果居然与arr的地址是相同的,这怎么可能。
当我输出*arr的时候结果是为零,这可以理解,因为他代表了该数组的第一个元素。但是和前面的联系起来看,就有问题了,arr的中储存的地址内容是他本身的地址,那个他指向的就是他本身,*arr的结果应该与arr相同才对,这到底怎么回事啊
展开
 我来答
168呵呵
2013-12-14 · TA获得超过631个赞
知道小有建树答主
回答量:1346
采纳率:0%
帮助的人:323万
展开全部
理解这个很重要,当你理解之后你就会发现设计C语言的大师们是多么的聪明,这些设计非常利于C语言书写的简洁
a与&a都是指针,指针有两个要素
第一个是地址值,也就指向的位置,你打印出来的就是地址值,a与&a的地址值是一样的
第二个是类型(所指向的数据类型),a指向数组第一个元素,&a指向数组a,a+1后的地址值会偏移一个元素的长度,&a+1后的地址值会便宜一整个数组的长度,所以a与&a类型是不一样的

关于指针与数组的关系,理解之后对你写代码质量会有很大的帮助,当然一开始理解起来会有难度,有一句话说的好:在C语言中只有一维数组(N维数组的元素是数组),数组名作为指针时永远指向第一个元素,如
数组a[3] ,*a = a[0],
数组a[3][4], *a = a[0],只不过这时候a[0]又是一个数组,这时候a[0]又是指向它自己元素的第一个元素,又有*a[0] = a[0][0].
这种方式可以推广到N维数组,所有数组直接对数组名取地址(如&a)得到的指针指向该数组,而不是指向第一个元素,注意这点区别哦,理解了我上面所说的,就知道了

还有对你的疑问说说我的看法
“arr表示的是数组的首地址”:没错,arr就是指向第一个元素的指针
"&arr表示的是数组的首地址的地址":这句话不对,我更倾向于把&arr理解为指向数组arr的指针

“arr相当于一个指针, 我现在直接用printf输出arr相当于输出了arr中储存的内容(不是输出以该内容为地址的变量),其结果居然与arr的地址是相同的,这怎么可能。”:

arr只是一个符号,本身不是变量不存在存储内容的说法
更多追问追答
追问
我靠,你太牛逼了,膜拜啊,理解这个不太容易,像你这样讲清楚就更难了,你是应该有大四了吧
追答
你过奖了,理解了就好,指针跟数组是C的精髓,理解之后才能写出简洁高效的代码,我已经工作三年多了,有问题可以一起讨论o(∩_∩)o
纵横家_
2013-12-14 · 超过59用户采纳过TA的回答
知道小有建树答主
回答量:263
采纳率:0%
帮助的人:122万
展开全部
c语言里面数组的地址也是首位的地址.这是定义的..& 是取地址。arr本来就是指针类型就是一个数据地址 &arr 、arr 他们指向的地址都是首位元素的地址 也是整个数组的地址。
追问
去看看你楼上那个人发的链接,你就知道你错得很离谱,而且你没理解我的意思
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
x_iam
2013-12-14 · TA获得超过180个赞
知道小有建树答主
回答量:252
采纳率:100%
帮助的人:210万
展开全部
这个帖子分析得很精彩,楼主可以看看http://www.jb51.net/article/40769.htm
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式