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