C语言问题,请问二维数组的函数参数是怎么传递的?

这就是坑。
别相信。
不要这样做。

使用布局和长度切割框架。

C语言中如何将二维数组作为函数的参数传递

上周,朋友写了一个C程序,涉及到二维数组传递参数的问题。
他说,在函数声明中,二维数组第一维的大小可以省略,但第二维不能省略。
像这样: void f(int array[3 ][1 0]); 或 void f(int array[][1 0]); 都是可以接受的。

但是他发现如果省略第二个维度,比如这样:void f(int array[][]); 这是非法的。
因为传递的是数组的起始地址,而内存是按行存储的,所以系统必须知道每一行的元素个数,否则就无法知道每一行的具体长度。

而且,他尝试只指定行数而不指定列数,例如: void f(int array[3 ][]); 也没有工作。

后来,他想到了一种方法,使用指针数组来处理动态大小的二维数组。
他写了一个形参:void f(int(array)[1 0]); 那么实际参数可以是:int a[2 ][1 0]; 或 int a[4 ][1 0]; 这样就灵活多了。

他说编程就是这样。
你必须注意细节,例如数组维度的匹配和声明,以确保程序正确且高效。
算了,他今天还得继续调试程序。
由你决定。