将多维数组传递给C中的函数

时间:2012-03-30 12:38:51

标签: c arrays array-address

为什么有必要在将C数组作为参数传递给函数时指定C数组的元素数(以下示例中为10)?

void myFun(int arr[][10]) {}

是这样的,因为需要元素的数量来确定被访问的单元的地址吗?

3 个答案:

答案 0 :(得分:3)

是。这是因为如果arr[i][j]((int *)arr)[i * N + j]arr表示int [][N]:指针算术需要行的长度。

答案 1 :(得分:1)

编译器需要知道下一行何时在内存中启动(因为2D数组只是一个连续的内存块,一行接着另一行)。编译器不是psyche!

答案 2 :(得分:1)

只有在为数组思想使用静态分配时才需要。因为生成代码为数组创建了一个连续的内存块,就像指出ruakh。

但是,如果使用动态分配则没有必要,只需要传递指针。

此致