在C语言中将多维数组传递给函数

在C语言中将多维数组传递给函数,c,arrays,array-address,C,Arrays,Array Address,当一个C数组作为一个参数传递给一个函数(在下面的例子中是10)时,为什么需要指定它的元素数 是因为需要元素的数量来确定被访问单元的地址吗?是。这是因为arr[i][j]意味着((int*)arr)[i*N+j]如果arr是int[][N]:指针算法需要行的长度。是的。这是因为arr[i][j]意味着((int*)arr)[i*N+j]如果arr是一个int[][N]:指针算法需要一行的长度。编译器需要知道下一行在内存中何时开始(因为二维数组只是一个连续的内存块,一行接一行)。编译器不是psych

当一个C数组作为一个参数传递给一个函数(在下面的例子中是10)时,为什么需要指定它的元素数


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

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

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

编译器需要知道下一行在内存中何时开始(因为二维数组只是一个连续的内存块,一行接一行)。编译器不是psyche

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

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

但是,如果使用动态分配,则不必这样做,只需传递指针即可


关于

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

但是,如果使用动态分配,则不必这样做,只需传递指针即可

问候

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