Yahoo 知識+ 將於 2021 年 5 月 4 日 (美國東岸時間) 停止服務,而 Yahoo 知識+ 網站現已轉為僅限瀏覽模式。其他 Yahoo 資產或服務,或你的 Yahoo 帳戶將不會有任何變更。你可以在此服務中心網頁進一步了解 Yahoo 知識+ 停止服務的事宜,以及了解如何下載你的資料。

?
Lv 6
? 發問於 電腦與網際網路程式設計 · 5 年前

C語言:關於一個二維陣列如何傳入 函式的問題?

是這樣的,我想把一個二維陣列傳入函式

然後我大概是這樣子寫(C99):

因為發問系統無法使用百分比符號

所以我用(o/o)代替

int func(int**,int);

int main(){

scanf("(o/o)d",&n);

int a[n+1][n+1];

...

func(a,n);

return 0;

}

int func(int** a,int n){

printf("a[0][1]");

return 0;

}

理論上,一個二維陣列

陣列名稱會產生一個二維指標才是阿

但是他卻告訴我

"warning: passing argument ... from incompatible pointer type"

誰可以幫我解釋一下

為什麼會發生這類事情

感激萬分!!!

1 個解答

評分
  • 5 年前
    最愛解答

    > 理論上,一個二維陣列 陣列名稱會產生一個二維指標才是阿

    WRONG.

    TYPE a[A][B];

    typeof(a) == (TYPE const * [B])

    typeof(a) != TYPE**

    所以:

    func(a,n)

    當然叫不到:

    int func(int**,int)

    所以他卻告訴你

    "warning: passing argument ... from incompatible pointer type"

    是絕對正確的!

    何況:

    func(a, n); // 也是錯誤的!!!

    x = func(&a[0][0], n+1); //才是對的!!!

    為神? 自己先想想吧!

    > 感激萬分!!!

    不必.

還有問題嗎?立即提問即可得到解答。