黑马程序员技术交流社区

标题: 一个指针题目 [打印本页]

作者: hailiqh    时间: 2015-10-1 11:32
标题: 一个指针题目
int a[ ] = {1,2,3,4,5};
int *p=(int *)(&a+1);
p--;
p[0]=?
作者: wwf707542865    时间: 2015-10-1 12:49
楼主自己测试了么,答案是5么?
作者: hailiqh    时间: 2015-10-1 13:20
wwf707542865 发表于 2015-10-1 12:49
楼主自己测试了么,答案是5么?

没测,没有C语言测试软件,你帮我测吧,我感觉是1
作者: 杰杰    时间: 2015-10-1 14:18
wwf707542865 发表于 2015-10-1 12:49
楼主自己测试了么,答案是5么?

你说对了,可以告诉我是怎么想的么,我看见第一时间也是认为是1 。然后去做了测试。是5  跟我说说5的思路吧。
作者: 杰杰    时间: 2015-10-1 14:19
这个是测试

11.png (34.4 KB, 下载次数: 98)

11.png

作者: huayu    时间: 2015-10-1 14:23
用的是数组的地址加1,指向数组下一个地址,再自减1,回到数组最后一位元素的地址,就是5
作者: A侠    时间: 2015-10-1 14:29
???????????????
作者: tz19900926    时间: 2015-10-1 14:46
绕的头疼,最烦这种题目了。
作者: 杰杰    时间: 2015-10-1 14:48
huayu 发表于 2015-10-1 14:23
用的是数组的地址加1,指向数组下一个地址,再自减1,回到数组最后一位元素的地址,就是5 ...

意思是&a+1是数组a的地址一整个加的,加到了一个不存在的a[5]那,然后指向了a[5],然后p自减   得到p[0]的值就等于a[4]的值  5?是这个意思么。。不过p不是个指针么,怎么能用P[0]取值啊,不应该用*p取值的么。
作者: hailiqh    时间: 2015-10-1 15:09
杰杰 发表于 2015-10-1 14:48
意思是&a+1是数组a的地址一整个加的,加到了一个不存在的a[5]那,然后指向了a[5],然后p自减   得到p[0]的 ...

我也有这个疑问
作者: 超の    时间: 2015-10-1 15:58
这个题好难啊!
作者: 浩润2015    时间: 2015-10-1 16:44
&a+1指向了数组末尾下一个地址,p--使指针指向a[4]这个地址,p[0]当然等于a[4]这个元素5.
作者: hailiqh    时间: 2015-10-1 18:16
浩润2015 发表于 2015-10-1 16:44
&a+1指向了数组末尾下一个地址,p--使指针指向a[4]这个地址,p[0]当然等于a[4]这个元素5. ...

&a的意思是整个数组的首地址啊,&a+1不是指向第二个元素了么?
作者: 浩润2015    时间: 2015-10-1 19:54
&(a+1)这个才是指指向第二个元素了
作者: wwf707542865    时间: 2015-10-1 23:07
杰杰 发表于 2015-10-1 14:18
你说对了,可以告诉我是怎么想的么,我看见第一时间也是认为是1 。然后去做了测试。是5  跟我说说5的思路 ...

才上贴吧,楼下有人给你解释了,他的思路是对的
作者: 洪吉童    时间: 2015-10-1 23:18
本帖最后由 洪吉童 于 2015-10-1 23:20 编辑

我是这么理解的:把&a看做是一个数组类型的指针,这个数组类型在内存空间里占用5*int=20个字节,这个指针+1就在内存中就+20个字节(就像int*类型的指针+1就相当于+4个字节),那么就成了一个所谓的a[5],再-1就是a[4]=5.
还有楼上说的第二个元素的地址不是&(a+1),应该是(int*)((int)&a+4)
作者: hailiqh    时间: 2015-10-2 20:23
洪吉童 发表于 2015-10-1 23:18
我是这么理解的:把&a看做是一个数组类型的指针,这个数组类型在内存空间里占用5*int=20个字节,这个指针+1 ...

我有点晕了。。。你们学习好刻苦,夜里11点多了还在写答案,谢谢你的解答,向你学习!
作者: 大宝820    时间: 2015-10-4 00:01
&a+1指向下一个地址,并非数组元素a【1】的地址。
作者: chensc    时间: 2015-10-4 07:26
学习学习!




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