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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 一丢丢大人 中级黑马   /  2015-9-5 22:21  /  3007 人查看  /  19 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1.下面打印出来的结果是什么?

int a[]={1,2,3,4,5};

int *p=(int*)(&a+1);

printf("%d,%d\n",*(a+1),*(p-1));




思路: int *p=&a+1;*(a+1)==2   p=&a+1

19 个回复

正序浏览
LucienER 来自手机 中级黑马 2015-9-10 12:37:24
20#
好吧…我不会…还要多努力啊
回复 使用道具 举报
408205555 发表于 2015-9-8 18:42
2很好理解,不解释了。
int *p=(int*)(&a+1);
&a,a本来就是一个地址,&a相当于一个指向了该地址的指针。该 ...

回复清晰,准确,大神
回复 使用道具 举报
是个好题。但是一维数组里硬是套个二维数组的知识点,实际应用中不建议这么使用,容易把人倒晕。。。
回复 使用道具 举报 1 0
果然是经典题,出镜的频率太高了
回复 使用道具 举报
我来看看热闹
回复 使用道具 举报
本帖最后由 408205555 于 2015-9-8 18:43 编辑

2很好理解,不解释了。
int *p=(int*)(&a+1);
&a,a本来就是一个地址,&a相当于一个指向了该地址的指针。该地址是一个数组地址,那么&a就是一个数组指针。
数组指针+1,说明这个指针的偏移量(注意这里:我说的是偏移量)是sizeof(int)*5个字节,就是说指针一下偏移到了紧挨着数组的下一个地址。因为当前的这个指针是一个数组指针,它代表这个数组。+1就是数组的下一个位置。数组有多少个元素,指针就会向下偏移sizeof(元素类型)*元素类型所占字节。
把这个指针强制转换成(int*)就是说让这个指针不再以数组的长度作为标准计算,而是以普通的int类型所占字节来计算。
而int类型所占字节是4.
p-1就是向上偏移4个字节,可以理解成p+sizeof(int)*5-sizeof(int)=p+sizeof(int)*4,就是数组中下标是4的那个数据,就是5
回复 使用道具 举报 1 0
我来看看热闹
回复 使用道具 举报
好东西谢谢了
回复 使用道具 举报
赞一个!!!谢谢分享
回复 使用道具 举报
这个题老师讲之前就看到过,跟宿舍传智的讨论半天都不会
本来说问老师的,结果还没问就直接讲了...
回复 使用道具 举报 1 0
才开班,还没有学到这里.
回复 使用道具 举报
学习学习!
回复 使用道具 举报
kylmetz 发表于 2015-9-5 23:37
这个 不是今天刚讲过吗?

是啊!但还是要自己过一遍思路才记得牢
回复 使用道具 举报
kylmetz 发表于 2015-9-5 23:37
这个 不是今天刚讲过吗?

是啊!但还是要自己过一遍思路才记得牢
回复 使用道具 举报
为什么是2,5
回复 使用道具 举报
这个 不是今天刚讲过吗?
回复 使用道具 举报
2    ,     5
回复 使用道具 举报

right,够速度
回复 使用道具 举报
2,5   right
回复 使用道具 举报 1 0
您需要登录后才可以回帖 登录 | 加入黑马