比方說,我有兩個數組,我將它們傳遞給函數:爲什麼我們在傳遞動態二維數組時不需要列數?
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