首頁 > 後端開發 > C++ > 如何將多維數組傳遞給 C 和 C 中的函數?

如何將多維數組傳遞給 C 和 C 中的函數?

DDD
發布: 2024-12-24 17:28:18
原創
182 人瀏覽過

How Can Multidimensional Arrays Be Passed to Functions in C and C  ?

將多維數組傳遞給 C 和 C 語言中的函數

在程式設計中,陣列是儲存資料集合的基本資料結構。處理多維數組時,了解如何將它們傳遞給函數以對其元素執行操作非常重要。

考慮以下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 會引發錯誤

在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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板