作者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)