黑马程序员技术交流社区

标题: 一道经典面试题 [打印本页]

作者: 孙明海    时间: 2015-10-26 22:28
标题: 一道经典面试题
#include <stdio.h>
int main(){
    int a[]={1,2,3,4,5};
    int *p=(int *)(&a+1);
    printf("%d,%d\n",*(a+1),*(p-1));
    return 0;
}
2,5


作者: ccwinner    时间: 2015-10-27 17:18
a再取地址,相当于指针的指针,它加一的跨度就变成a数组的大小了
作者: wangchao1992    时间: 2015-10-27 20:15
从哪看的, 不理解啊, 求解释
作者: 菜鸟adambo    时间: 2015-10-27 21:03
学习 学习.ios  以后留着用
作者: 529548466    时间: 2015-10-27 21:45
顶 ......................
作者: 张水    时间: 2015-10-27 21:47
顶一下  我也在学习这个题目
作者: liuch111    时间: 2015-10-27 21:47
jin jian``````
作者: 眼瞳╄渲染繁华    时间: 2015-10-28 20:41
怎么看不懂
作者: 孙明海    时间: 2015-10-28 21:06
wangchao1992 发表于 2015-10-27 20:15
从哪看的, 不理解啊, 求解释

*p=(int *)(&a+1);&a表示数组的指针 &a+1指针向高位移动sizeof(a)个字节,(int *)(&a+1)将数组指针强转为int型指针.*(p-1)表示将指针向低位移动一个4个字节取值 指针刚好移动到a[4]的地址 取值等于a[4]=5
作者: 孙明海    时间: 2015-10-28 21:07
眼瞳╄渲染繁华 发表于 2015-10-28 20:41
怎么看不懂

*p=(int *)(&a+1);&a表示数组的指针 &a+1指针向高位移动sizeof(a)个字节,(int *)(&a+1)将数组指针强转为int型指针.*(p-1)表示将指针向低位移动一个4个字节取值 指针刚好移动到a[4]的地址 取值等于a[4]=5
作者: 孙明海    时间: 2015-10-28 21:08
ccwinner 发表于 2015-10-27 17:18
a再取地址,相当于指针的指针,它加一的跨度就变成a数组的大小了

恭喜你答对了
作者: 孙明海    时间: 2015-10-28 21:10
ccwinner 发表于 2015-10-27 17:18
a再取地址,相当于指针的指针,它加一的跨度就变成a数组的大小了

恭喜你答对了
作者: 开枪吧_Z7K5Z    时间: 2015-10-28 21:11
加油 慢慢来吧
作者: 孙明海    时间: 2015-10-28 21:11
菜鸟adambo 发表于 2015-10-27 21:03
学习 学习.ios  以后留着用

我也是留着以后看的
作者: Brisingr    时间: 2015-10-28 21:31
学习了{:2_40:}
作者: p495416980    时间: 2015-10-29 08:56
学习了,指针问题需要思路清晰
作者: 雷厉风行    时间: 2015-10-29 09:03
好像很厉害的样子,留着
作者: zyios    时间: 2015-10-29 10:38
不确定答案,求解释
作者: tsc0000    时间: 2015-10-29 19:20
a 是一维数组的首地址,&a就变成了二维数组中第一行数组的首地址了,那么&a+1 ,是二维数组中第二行的首地址,不管一维还是二维,数组的地址都是连续的

无标题.png (88.24 KB, 下载次数: 104)

无标题.png

作者: xiaobei    时间: 2015-10-29 19:33
楼上分析的比较明白,学习学习
作者: 孙明海    时间: 2015-10-29 21:21
p495416980 发表于 2015-10-29 08:56
学习了,指针问题需要思路清晰

指针太费脑细胞  不能想太多  知道就行
作者: yuweiyuwei    时间: 2015-10-29 21:32
不知道怎么做
作者: 孙明海    时间: 2015-10-29 21:32
zyios 发表于 2015-10-29 10:38
不确定答案,求解释

答案是确定的  上面我已经给出过解释的
*p=(int *)(&a+1);&a表示数组的指针 &a+1指针向高位移动sizeof(a)个字节,(int *)(&a+1)将数组指针强转为int型指针.*(p-1)表示将指针向低位移动一个4个字节取值 指针刚好移动到a[4]的地址 取值等于a[4]=5

作者: 孙明海    时间: 2015-10-29 21:34
tsc0000 发表于 2015-10-29 19:20
a 是一维数组的首地址,&a就变成了二维数组中第一行数组的首地址了,那么&a+1 ,是二维数组中第二行的首地 ...

大神啊  
作者: 天川瑞奈    时间: 2015-10-29 21:40
那么第一个输出的2是怎么来的....直接学的OC,对C语言代码了解比较少,学来参考下
作者: MLP1355053753    时间: 2015-10-29 21:52
加油加油,赞一个
作者: kingwang    时间: 2015-10-29 22:29
*(a+1)没问题,*(p-1)有点绕
作者: tsc0000    时间: 2015-10-30 14:46
孙明海 发表于 2015-10-29 21:34
大神啊

哪里,见笑了
作者: wzf2015    时间: 2015-10-30 22:42
看起来很经典




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