黑马程序员技术交流社区
标题: 一道经典面试题 [打印本页]
作者: 孙明海 时间: 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
*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
*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
恭喜你答对了
作者: 孙明海 时间: 2015-10-28 21:10
恭喜你答对了
作者: 开枪吧_Z7K5Z 时间: 2015-10-28 21:11
加油 慢慢来吧
作者: 孙明海 时间: 2015-10-28 21:11
我也是留着以后看的
作者: 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)
作者: xiaobei 时间: 2015-10-29 19:33
楼上分析的比较明白,学习学习
作者: 孙明海 时间: 2015-10-29 21:21
指针太费脑细胞 不能想太多 知道就行
作者: yuweiyuwei 时间: 2015-10-29 21:32
不知道怎么做
作者: 孙明海 时间: 2015-10-29 21:32
答案是确定的 上面我已经给出过解释的
*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
大神啊
作者: 天川瑞奈 时间: 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
哪里,见笑了
作者: wzf2015 时间: 2015-10-30 22:42
看起来很经典
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |