A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© hailiqh 中级黑马   /  2015-10-1 11:32  /  2292 人查看  /  18 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

int a[ ] = {1,2,3,4,5};
int *p=(int *)(&a+1);
p--;
p[0]=?

18 个回复

倒序浏览
楼主自己测试了么,答案是5么?
回复 使用道具 举报
wwf707542865 发表于 2015-10-1 12:49
楼主自己测试了么,答案是5么?

没测,没有C语言测试软件,你帮我测吧,我感觉是1
回复 使用道具 举报
wwf707542865 发表于 2015-10-1 12:49
楼主自己测试了么,答案是5么?

你说对了,可以告诉我是怎么想的么,我看见第一时间也是认为是1 。然后去做了测试。是5  跟我说说5的思路吧。
回复 使用道具 举报
这个是测试

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

11.png
回复 使用道具 举报
用的是数组的地址加1,指向数组下一个地址,再自减1,回到数组最后一位元素的地址,就是5
回复 使用道具 举报
A侠 中级黑马 2015-10-1 14:29:09
7#
???????????????
回复 使用道具 举报
绕的头疼,最烦这种题目了。
回复 使用道具 举报
杰杰 中级黑马 2015-10-1 14:48:45
9#
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取值的么。
回复 使用道具 举报
杰杰 发表于 2015-10-1 14:48
意思是&a+1是数组a的地址一整个加的,加到了一个不存在的a[5]那,然后指向了a[5],然后p自减   得到p[0]的 ...

我也有这个疑问
回复 使用道具 举报
这个题好难啊!
回复 使用道具 举报
&a+1指向了数组末尾下一个地址,p--使指针指向a[4]这个地址,p[0]当然等于a[4]这个元素5.
回复 使用道具 举报
浩润2015 发表于 2015-10-1 16:44
&a+1指向了数组末尾下一个地址,p--使指针指向a[4]这个地址,p[0]当然等于a[4]这个元素5. ...

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

才上贴吧,楼下有人给你解释了,他的思路是对的
回复 使用道具 举报
本帖最后由 洪吉童 于 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)
回复 使用道具 举报
洪吉童 发表于 2015-10-1 23:18
我是这么理解的:把&a看做是一个数组类型的指针,这个数组类型在内存空间里占用5*int=20个字节,这个指针+1 ...

我有点晕了。。。你们学习好刻苦,夜里11点多了还在写答案,谢谢你的解答,向你学习!
回复 使用道具 举报
&a+1指向下一个地址,并非数组元素a【1】的地址。
回复 使用道具 举报
学习学习!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马