A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© yushimin763 中级黑马   /  2015-8-19 11:51  /  634 人查看  /  5 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

请问这个题为什么选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

5 个回复

正序浏览
厉害,,,
回复 使用道具 举报
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
系统分配数组空 ...

分析的不错啊,厉害
回复 使用道具 举报
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
系统分配数组空 ...

谢谢,非常详细
回复 使用道具 举报
由题目可以知道
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
后面这两个应该没问题吧
回复 使用道具 举报
这里考察了越界取值的问题,画个内存分析图就看出来了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马