为什么有必要在将C数组作为参数传递给函数时指定C数组的元素数(以下示例中为10)?
void myFun(int arr[][10]) {}
是这样的,因为需要元素的数量来确定被访问的单元的地址吗?
答案 0 :(得分:3)
是。这是因为如果arr[i][j]
是((int *)arr)[i * N + j]
,arr
表示int [][N]
:指针算术需要行的长度。
答案 1 :(得分:1)
编译器需要知道下一行何时在内存中启动(因为2D数组只是一个连续的内存块,一行接着另一行)。编译器不是psyche!
答案 2 :(得分:1)
只有在为数组思想使用静态分配时才需要。因为生成代码为数组创建了一个连续的内存块,就像指出ruakh。
但是,如果使用动态分配则没有必要,只需要传递指针。
此致