[問題] 這是什麼錯誤訊息呢??

看板C_and_CPP作者 (我愛貓貓)時間15年前 (2009/08/06 00:35), 編輯推噓5(508)
留言13則, 5人參與, 最新討論串1/1
行 檔案 訊息 main.c In function `main': 16 main.c [Warning] passing arg 1 of `sumarray' from incompatible pointer type 可以編譯成功 執行結果也正確 但不清楚為何會出現上述的訊息.. 原程式如下(將二維陣列的所有值做加總): #include <stdio.h> int sumarray(int *a,int row,int col) { int i,j,sum=0; for(i=0;i<row;i++) for(j=0;j<col;j++) sum += *(a+i*col+j); return sum; } int main() { int a; int array[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; a=sumarray(array,3,4); printf("二維陣列array的所有值加總是%d~",a); return 0; } 想請問程式中哪裡有寫的不好呢?為何會有剛剛說的訊息呢?? 希望有高手能回答我的問題謝謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.44.109.178

08/06 00:55, , 1F
你傳二維陣列 進去函式 這樣type是錯的
08/06 00:55, 1F

08/06 01:04, , 2F
可是我可以編譯 而且執行結果正確???????
08/06 01:04, 2F

08/06 01:05, , 3F
你的編譯器也都警告了 不過應該是要compile不會過才是
08/06 01:05, 3F

08/06 01:06, , 4F
還是寫成 int a[][4]才是
08/06 01:06, 4F

08/06 01:06, , 5F
如果你硬是要讓他過 就寫成int (*ptr)[4]
08/06 01:06, 5F

08/06 01:07, , 6F
我可以編譯成功 執行結果也都正確 但是那訊息不懂.....
08/06 01:07, 6F

08/06 01:09, , 7F
incompatible 意思就是你型態 不符 縱使你這樣寫他給你正確
08/06 01:09, 7F

08/06 01:09, , 8F
答案 但不代表你這是對的寫法 畢竟他也給妳了warning
08/06 01:09, 8F

08/06 01:09, , 9F
如果我用VC 他不會讓我過
08/06 01:09, 9F

08/06 01:26, , 10F
印象中, C可以這樣搞warning, C++的話會被當作error@_@"
08/06 01:26, 10F

08/06 11:43, , 11F
可參考#1AOkGwYb
08/06 11:43, 11F

08/06 12:14, , 12F
不能直接 int **a 這樣? \._.
08/06 12:14, 12F

08/06 12:25, , 13F
我記得是不行, int **a 與 二維陣列名稱 型態不同
08/06 12:25, 13F
文章代碼(AID): #1AURJAUq (C_and_CPP)