在程式設計中,陣列是儲存資料集合的基本資料結構。處理多維數組時,了解如何將它們傳遞給函數以對其元素執行操作非常重要。
考慮以下C 程式碼:
void print(int *arr[], int s1, int s2) { // ... } int main() { int a[4][4] = {{0}}; print(a, 4, 4); }
此程式碼旨在透過將int[4][4] 類型的多維數組a 傳遞給需要指向整數(int **) 的指標數組的函數print。令人驚訝的是,這段程式碼在 C 中編譯成功,但在 C 中編譯失敗。
在C 中,錯誤很明顯:
cannot convert `int (*)[4]' to `int**' for argument `1' to `void print(int**, int, int)'
此錯誤表示C 不允許從多維數組(int[4][4 ]) 到整數指標數組(int **) 的隱式轉換。這是因為這兩種資料類型在結構和解釋上根本不同。
要修正此錯誤,您可以使用 C 中稱為「陣列位址衰減」的技術或在 C 中將多維數組顯式轉換為指針數組.
C:
int main() { int a[4][4] = {{0}}; print(a, 4); // Pass the base address of the multidimensional array (array address decay) } void print(int *arr, int s) { // ... }
C :
int main() { int a[4][4] = {{0}}; print(a, 4, 4); // Explicit conversion to an array of pointers } void print(int **arr, int s1, int s2) { // ... }
以上是如何將多維數組傳遞給 C 和 C 中的函數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!