C语言一个二维数组的问题

来源:百度知道 编辑:UC知道 时间:2024/05/30 05:24:59
int aa[3][3]={{2},{4},{6}};
main()
{ int i,*p=&aa[0][0];
for(i=0;i<2;i++)
{ if(i==0)
aa[i][i+1]=*p+1;
else
++p;
printf("%d\n",*p);
}
}

A.23 B.26 C.33 D.46

希望高人分析一下过程。。。。。。

答案A

for(i=0;i<2;i++)
{ if(i==0)
aa[i][i+1]=*p+1;
else
++p;
printf("%d\n",*p);
}
中 第一次i=0;可以得到aa[0][1]=*p+1=2+1=3,然后执行
printf("%d\n",*p); 即输出aa[0][0]=2;
第一次i=1;执行++p;即p的地址加1;然后printf("%d\n",*p);
此时*p=aa[0][1];根据第一次中得到aa[0][1]=3
即输出3;
答案为: 2
3

*p=&aa[0][0];//其值为2
第一次循环把*p+1(2+1)赋值给aa[i][i+1]
*p不变输出为2
第2次循环i!=0
执行else
++p;
输出3;

首先p为数值aa[0][0]地址,*p为值。
i取0~1间
当i=0时,aa[0][0]=2,而aa[0][1]=2+1=3,第一个循环结束;
当i=1时,*p下移,第二个循环结束。

所以答案是:
2
3
选择(A)。