下面这个二维数组,为什么a[0][3]和a[1][0]都是相同的啊?
下列程序执行后的输出结果是()。(2012.中兴)
main()
{
int a[3][3], *p, i;
p = &a[0][0];
for (i=0;i<9;i++)
{
p[i] = i + 1;
}
printf("a[1][2]= %d \n",a[1][2]);
}
A.3 B.6 C.9 D.随机数
答案是B。p[i] = *(p+i)。数组a被依次初始化为{1,2,3,4,5,6,7,8,9},故a[1][2]=6。
我本来的错误答案是a[1][2]=7。
错误原因分析:
- a[0][3]已经越界了,实际上就是a[1][0],第一维的下标只能到2
- a在内存里是这样的:
- a[0][0],a[0][1]