作者hikaru4 (光)
看板b96902HW
標題Re: [鋼彈] 6-2 二維陣列跟函式的問題
時間Sat Nov 10 14:47:58 2007
※ 引述《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
1F:推 chhsiao:沒錯! (不過這上次助教課有說喔 ;p) 11/10 14:55
2F:→ sumty:非常感激 11/10 14:55
3F:推 Himax:看不懂 我好弱 11/10 15:32
4F:→ sumty:一樓是使徒助教?我是單班的,你應該會原諒我沒去助教課吧xd 11/10 15:33
5F:推 jimmycool:一樓是比使徒還強的助教... 11/10 17:00
6F:推 zvc1234455:我懂耶~XD,這麼說如果是一維矩陣的話,會傳出值 11/10 18:08
7F:→ zvc1234455:二維的話,compiler會混亂,必須加入二維矩陣陣列才行囉? 11/10 18:09
8F:→ zvc1234455:懇請比使徒還強的助教回答@@ 11/10 18:11
※ 編輯: hikaru4 來自: 140.112.30.107 (11/11 12:24)