黑马程序员技术交流社区

标题: 求大神给讲讲第12题 [打印本页]

作者: 克莱斯勒    时间: 2015-9-8 21:21
标题: 求大神给讲讲第12题
彬哥说是和二维数组线性什么的有关
12. 若定义如下变量和数组,输出的结果是多少 ( B )
int x[3][2]={{1,5},{4,2},{1,6}}; int i;
for(i=0;i<3;i++)
printf("%d",x[i][2-i]);
return 0;


A. 2 1 6         B. 4 2 1            C. 4 1 2            D. 5 4 2

作者: lionheartism    时间: 2015-9-8 22:01
唯一不好理解就是第一个输出为4,原因就是c语言中是没有下标越界检查,按理说x[0][2]是越界的。
在内存中,x是按照1 5 4 2 1 6存储的。x[0][2]是首先找到x[0]的地址在偏移两个单位,就跑到了4上了。 画了个图不太标准但是就这么个原理,因为没有越界检查所以似的[0][2]成为可能,跑到了不属于第一行的范围外了


作者: 翟宇浩    时间: 2015-9-8 22:25
的确是越界的问题,直接访问到下一个了,这里 x[0][2] 和 x[1][0]的值是一样的
作者: 郭占岭    时间: 2015-9-8 22:31
i=0时为x[0][2],越界到x[1][0]=4,后两个数不用说了吧
作者: 克莱斯勒    时间: 2015-9-8 22:44
lionheartism 发表于 2015-9-8 22:01
唯一不好理解就是第一个输出为4,原因就是c语言中是没有下标越界检查,按理说x[0][2]是越界的。
在内存中, ...

明白了,谢谢
作者: ZQG    时间: 2015-9-8 22:48
在Xcode运行一下呗,技术总监就是犀利
作者: 克莱斯勒    时间: 2015-9-8 22:52
翟宇浩 发表于 2015-9-8 22:25
的确是越界的问题,直接访问到下一个了,这里 x[0][2] 和 x[1][0]的值是一样的 ...

多谢..............




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