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