黑马程序员技术交流社区

标题: 求解答,谢谢 [打印本页]

作者: yushimin763    时间: 2015-8-19 11:51
标题: 求解答,谢谢
请问这个题为什么选B,是怎么输出4的4对应的数组应该是x[1][0]是怎么输出的?
若定义如下变量和数组,输出的结果是多少 (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

作者: bianning888    时间: 2015-8-19 12:54
这里考察了越界取值的问题,画个内存分析图就看出来了
作者: aidan    时间: 2015-8-19 13:13
由题目可以知道
x[0][0]=1   x[0][1]=5   x[1][0]=4   x[1][1]=2   x[2][0]=1   x[2][1]=6
系统分配数组空间时地址是连续的,不防就设为如下
0x01         0x02          0x03         0x04         0x05          0x06
x[i][2-i]
第一次循环:输出x[0][2]=4
注意,这里的下标越界了,但由于数组的地址连续,所以取的值是x[0][1]后面的x[1][0],所以输出的值是4
第二次循环:输出x[1][1]=2
第三次循环:输出x[2][0]=1
后面这两个应该没问题吧

作者: yushimin763    时间: 2015-8-19 13:37
aidan 发表于 2015-8-19 13:13
由题目可以知道
x[0][0]=1   x[0][1]=5   x[1][0]=4   x[1][1]=2   x[2][0]=1   x[2][1]=6
系统分配数组空 ...

谢谢,非常详细
作者: tangbinbin    时间: 2015-8-19 19:10
aidan 发表于 2015-8-19 13:13
由题目可以知道
x[0][0]=1   x[0][1]=5   x[1][0]=4   x[1][1]=2   x[2][0]=1   x[2][1]=6
系统分配数组空 ...

分析的不错啊,厉害
作者: tangbinbin    时间: 2015-8-19 20:33
厉害,,,




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