1

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

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

是不是因为需要元素的数量来确定被访问的单元格的地址?

4

3 回答 3

3

是的。这是因为arr[i][j]意味着((int *)arr)[i * N + j]ifarr是一个int [][N]:指针算术需要一行的长度。

于 2012-03-30T12:41:09.900 回答
1

编译器需要知道下一行何时在内存中开始(因为 2D 数组只是一块连续的内存,一行接一行)。编译器不是心灵!

于 2012-03-30T12:44:07.237 回答
1

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

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

问候

于 2012-03-30T12:44:14.670 回答