看板 b96902HW 關於我們 聯絡資訊
※ 引述《sumty (elva)》之銘言: : /*6-2*/ : void con(int*,int,int); : int main(){ : int row,col,im[size][size]; : ...... : con(im,row,col); /*第15行*/ : ........ : } : void con(int*im,int row,int col){ : if(.....){ : if(im[row][col]==1){ /*第24行*/ : ............... : } : } : } : 出現這樣的compiler waring跟error (p.s.在linux操作環境下) : b96025@linux8 [~/hw/a6] gcc a6-p2.c : a6-p2.c: In function 'main': : a6-p2.c:15: warning: passing argument 1 of 'con' from incompatible pointer : type : a6-p2.c: In function 'con': : a6-p2.c:24: error: subscripted value is neither array nor pointer : 想請問大家,這是什麼意思呢? : 是否是二維陣列不能以指標的方式丟到函式裡 : 如果是 : 想請教大家我要如何能將二維陣列放進函式裡處理 : 感激不盡 剛剛亂測試推論出來的結果 有錯請指正 void con(int*im,int row,int col) { if(.....) { if(im[row][col]==1){ /*第24行*/ ............... } } 在這個函式裡面 im 是一個 pointer 裡面存的是一個記憶體位置 (ex 0022ff74) im[row] 所代表的則是 im+ row 的那個記憶體位置裡面存的東西 也就是 0022ff74 + row*4 那個記憶體位置裡面存的東西 先假設裡面存的是"0"好了 同理 im[row][col] 則是指 這個"0"+ col 的那個記憶體位置裡面存的東西 可是這個"0"是一個值 不是一個記憶體位置 所以編譯器就混亂啦 因為他預期這是一個記憶體位置 int main() { int row,col,im[size][size]; ...... con(im,row,col); /*第15行*/ ........ } 而在main裡面 im[row][col] 代表的是 im + row*size + col 的記憶體位置裡面存的東西 所以如果要在函式裡面表達一樣的東西 看樣子應該要把size也跟著傳進去才有可能 這樣講不知道會不會很亂 XD -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.30.116
chhsiao:沒錯! (不過這上次助教課有說喔 ;p) 11/10 14:55
sumty:非常感激 11/10 14:55
Himax:看不懂 我好弱 11/10 15:32
sumty:一樓是使徒助教?我是單班的,你應該會原諒我沒去助教課吧xd 11/10 15:33
jimmycool:一樓是比使徒還強的助教... 11/10 17:00
zvc1234455:我懂耶~XD,這麼說如果是一維矩陣的話,會傳出值 11/10 18:08
zvc1234455:二維的話,compiler會混亂,必須加入二維矩陣陣列才行囉? 11/10 18:09
zvc1234455:懇請比使徒還強的助教回答@@ 11/10 18:11
※ 編輯: hikaru4 來自: 140.112.30.107 (11/11 12:24)