为什么把二维数组传递到函数中变成了一维数组?

下图是我函数的定义,第三个参数就是我传入的二维数组

img

下图是我函数的调用

img

下图是我传入的二维数组的初始化过程

img

下图是我在调试过程中发现的传入二维数组变成一维数组的情况

img

下图是传入前的二维数组,那时还是好好的

img

这是因为什么原因呢?

假设把二维数组 array 传进函数,可以这样写 int (*array)[10],注意这里的 *array 必须用括号括起来,否则 int *array[10] 参数相当于是声明了一个数组,该数组有10个元素,其中每个元素都是一个指向整型对象的指针。

但是不能把第二维或者更高维的大小省略,如下面的定义是不合法的:

void Func(int array[ ][ ]);


补充一点:

二维数据和一维数组没有本质上的区别

比如 A[M][N] 是一个M行N列的数组

对于 A[i][j] 可以表达成 A[i*N+j]