c语言数组的定义和输出

img

有大神帮忙解释下为什么我定义3*3的数组我输出[0][3]和[0][4]能输出这个结果出来

因为二维数组分配内存空间是连续着的,定义3*3的数组是连续着的9个整数空间
a[x][y] 等于是指针形式 *(a + x*3 + y) 其中x*33是二维数组的列数

a[0][3] 等于是 *(a + 0*3 + 3) 等于*(a+3) 是数组空间的第4个整数(a+0是第1个整数)
也就等于 a[1][0]
a[0][4] 同样等于是 *(a + 0*3 + 4) 等于*(a+4) 是数组空间的第5个整数(a+0是第1个整数)
也就等于 a[1][1]

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img

二维数组元素在内存是按行线性排列的。对于二维数组a[m][n]a[i][j]等价于*(a+i*n+j),因此
a[0][3]等价于*(a+0*3+3)==*(a+3)==*(a+1*3+0)==a[1][0]
a[0][4]等价于*(a+0*3+4)==*(a+4)==*(a+1*3+1)==a[1][1]

你用一个二维数组定义了一位数组然后你还想输出这是不可能的,好兄弟,你在下面写一些东西!