2012-03-30 114 views
1

为什么当它作为参数传递给一个函数(下例中为10)时,需要指定C数组的元素数量?将多维数组传递给函数C

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

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

回答

3

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

1

编译器需要有一个想法,当下一行开始在内存中(因为二维数组只是一个连续的内存块,一行接一行)。编译器不是灵魂!

1

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

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

Regards