问题
单项选择题
有以下程序:
main()
int a[3][2]=0,(*ptr)[2],i,j;
for(i=0;i<2;i++)
ptr=a+i; scanf("%d",ptr);ptr++;
for(i=0;i<3;i++)
for(j=0;j<2;j++) printf("%2d",a[i][j]);
printf("\n");
若运行时输入:1 2 3<回车>,则输出结果是
A) 编译错误
2 0
0 0
B) 1 0
2 0
0 0
C) 1 2
2 0
3 0
D) 1 0
答案
参考答案:B
解析: 首先二维数组a中的元素都初始化为0,其次定义了指向数组的指针ptr,并且依次将ptr指向二维数组a中的各行,循环语句for(i=0;i<2;i++)等价于:scanf("%d",a+0);scanf("%d",a+1);其中a+i即是数组a[i]的首地址,也是元素a[i][0]的地址,故以上语句读入两个整数,分别存入二维数组a的第1列中,在输入1 2 3后,a={{1,0},{2,0},{0,0}}。