请教一个多维数组的问题
int a[7][8][9],*ptr,m;
ptr=(int*)a;
for(m=0;m<sizeof(a)/sizeof(int);m++,ptr++)
*ptr=m;
Printf(“%d”,a[1][10][2]);
为什么结果是164.
[解决办法]
你的数组第二维大小为8,你能写一个a[1][10][2],第二维下标为10了。
a[1][10][2] 实际上指向的是a[2][2][2]
[解决办法]
sizeof(a)/sizeof(int) = 7*8*9+ = 504
C语言里面只有一维数组,
不管是a[][][]只要你的下标总和不超过504,都是有效的
而a[1][10][2] 是第 1*8*9+10*9+2 = 164个元素
for(m=0;m<sizeof(a)/sizeof(int);m++,ptr++)
*ptr=m;
这条语句是将0~503依次分配到数组a中,所以结果是164.