比方说,我有两个数组,我将它们传递给函数:为什么我们在传递动态二维数组时不需要列数?
void func(int arr1[][4], int **arr2) { // <- I need to give n in only one, why?
...
}
int main() {
int n = 5, m = 4;
int arr1[n][m];
int **arr2 = (int**)malloc(n * sizeof(int*));
for(int i = 0;i < n;i++)
arr2[i] = (int*)malloc(m * sizeof(int));
func(arr1, arr2);
return 0;
}
为什么我们不能把经过都以类似的方式排列?
编辑:代码中有错误。
'arr2'不是一个数组,而是一个指针,实际上是一个指向指针的指针。 – alk
在任何一种情况下,函数都需要以某种方式知道指向数据的大小。不管语法如何,都没有办法。所以理想情况下,你会写'void func(size_t x,size_t y,int arr [x] [y])''。 – Lundin
另请参阅[正确分配多维数组](https://stackoverflow.com/questions/42094465/correctly-allocating-multi-dimensional-arrays),以消除对动态二维数组的误解。 – Lundin