首頁 > 後端開發 > C++ > 為什麼我不能將多維數組作為 C 中的指標數組傳遞給函數?

為什麼我不能將多維數組作為 C 中的指標數組傳遞給函數?

Patricia Arquette
發布: 2024-12-15 15:03:22
原創
809 人瀏覽過

Why Can't I Pass a Multidimensional Array to a Function as an Array of Pointers in C  ?

理解無法將多維數組傳遞給函數

考慮以下程式碼片段:

#include <stdio.h>
void print(int *arr[], int s1, int s2) {
    int i, j;
    for(i = 0; i < s1; i++)
        for(j = 0; j < s2; j++)
            printf("%d, ", *((arr + i) + j));
}

int main() {
    int a[4][4] = {{0}};
    print(a, 4, 4);
}
登入後複製

此程式碼旨在旨在將多維數組a 傳遞給採用int 指標數組int 的函數print *arr[].然而,在 C中,此程式碼會產生以下錯誤:

cannot convert `int (*)[4]' to `int**' for argument `1' to
`void print(int**, int, int)'
登入後複製

解釋:

問題的癥結在於資料類型不相容。像 a 這樣的 C 風格多維數組不能直接轉換為指向 int *arr[] 指標數組的指標。在 C 中, a 的資料型態是 int[4][4],它表示整數的二維陣列。另一方面,int *arr[]是一個指向整數數組的指針,其中每個元素都是指向整數的指針。

解決方案:

到要解決此問題並將多維數組傳遞給採用int 指標數組的函數,您可以修改程式碼以將多維數組明確轉換為指針數組。這可以透過利用「將多維數組轉換為 C 中的指標」問題的已接受答案中描述的技術來實現。

附加說明:

  • 由於列印中的額外錯誤,初始範例中提供的程式碼在 C 中表現出意外的行為程式碼。
  • 使用非零值初始化數組 a 以觀察數組傳遞中錯誤的影響至關重要。
  • 由於列印,陣列傳遞中的錯誤在 C 中被掩蓋bug。
  • C 錯誤訊息清楚地表明了轉換問題,而 C 編譯器可能會錯誤地發出警告被忽略。

以上是為什麼我不能將多維數組作為 C 中的指標數組傳遞給函數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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