作者kissurface (我愛貓貓)
看板C_and_CPP
標題[問題] 這是什麼錯誤訊息呢??
時間Thu Aug 6 00:35:21 2009
行 檔案 訊息
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
→ sinsendo:不能直接 int **a 這樣? \._. 08/06 12:14
→ su31o4gj83:我記得是不行, int **a 與 二維陣列名稱 型態不同 08/06 12:25