黑马程序员技术交流社区

标题: 数组问题,求解,给出解题步骤,谢谢 [打印本页]

作者: 翟宇浩    时间: 2015-8-28 09:36
标题: 数组问题,求解,给出解题步骤,谢谢
若定义如下变量和数组,输出的结果是多少
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

我的理解是:
int x[3][2]={1,5,4,2,1,6}; 相当于  int x[3][2]={{1,5},{4,2},{1,6}};
当i为0时,输出  x[0][2], 但是这个数组是  3行2列 ,即
1  5   下标为 x[0][0]  x[0][1]
4  2   下标为 x[1][0]  x[1][1]
1  6   下标为 x[2][0]  x[2][1]
怎么有 x[0][2]呢,我有点晕
作者: 翟宇浩    时间: 2015-8-28 09:37
我在xcode中单独输出 x[0][2] 时提示:
Array index 2 is past the end of the array (which contains 2 elements)
难道是越界访问到下一行了?

作者: 庞佳星    时间: 2015-8-28 10:53
是越界了!!你可以把i<3改成i<2  然后把x[i][2-i]改成x[i][1-i]试试
作者: wowthe1st    时间: 2015-8-28 12:52
421,虽然越界了,但是不会出错,而且越界后地址也在数组地址范围内
作者: wowthe1st    时间: 2015-8-28 12:53
这样看也许会感觉不好理解,你把p[1][1]换成指针形式 *(*(p+1)+1)就很好理解了
作者: 小笼包    时间: 2015-8-28 17:00
好像还没看到的
作者: tangbinbin    时间: 2015-8-29 08:03
越界以后继续访问后面的元素,,




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