看板 C_and_CPP 關於我們 聯絡資訊
行 檔案 訊息 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
QQ29:你傳二維陣列 進去函式 這樣type是錯的 08/06 00:55
kissurface:可是我可以編譯 而且執行結果正確??????? 08/06 01:04
QQ29:你的編譯器也都警告了 不過應該是要compile不會過才是 08/06 01:05
QQ29:還是寫成 int a[][4]才是 08/06 01:06
QQ29:如果你硬是要讓他過 就寫成int (*ptr)[4] 08/06 01:06
kissurface:我可以編譯成功 執行結果也都正確 但是那訊息不懂..... 08/06 01:07
QQ29:incompatible 意思就是你型態 不符 縱使你這樣寫他給你正確 08/06 01:09
QQ29:答案 但不代表你這是對的寫法 畢竟他也給妳了warning 08/06 01:09
QQ29:如果我用VC 他不會讓我過 08/06 01:09
VictorTom:印象中, C可以這樣搞warning, C++的話會被當作error@_@" 08/06 01:26
su31o4gj83:可參考#1AOkGwYb 08/06 11:43
sinsendo:不能直接 int **a 這樣? \._. 08/06 12:14
su31o4gj83:我記得是不行, int **a 與 二維陣列名稱 型態不同 08/06 12:25