一道C语言的题

[复制链接]
查看11 | 回复5 | 2008-10-29 15:29:08 | 显示全部楼层 |阅读模式
point(char *p) { p+=3; }
main()
{ char b[4]={'a','b','c','d'}, *p=b;
point(p);
printf("%c\n",*p);
}
point(p); 中的P是地址吗?如果是地址应该是主函数的值也会变啊
point(*p);这样写的话才是值传递吧
我不明白这个问题 请高手指点
可能是我没说明白 这道题的输出是a
因为是值传递 我就不明白为什么point(p)是值传递,p不是地址吗

回复

使用道具 举报

千问 | 2008-10-29 15:29:08 | 显示全部楼层
p是地址啊,point(char *p)定义的是一个POINT函数,他的形参是指针,主函数里p是一个指向数组b首地址的指针,作为实参传给POINT(),如果你用point(*p),表示你传入的是一个p指向的变量,并不是指针,会发生错误。定义的时候*p的意思是声明这是一个指针变量形参,但是你调用的时候用*p的意思就是传入p所指向的变量了~...
回复

使用道具 举报

千问 | 2008-10-29 15:29:08 | 显示全部楼层
point(char *p) { *p+=3; } //此处p修改为*pmain() { char b[4]={'a','b','c','d'}, *p=b; point(p); printf("%c\n",*p); } 这样改就行了输出为d要是原来的程序,p是一个地址,加的是地址,p就指向别处了...
回复

使用道具 举报

千问 | 2008-10-29 15:29:08 | 显示全部楼层
P是b字符串的指针调用point函数后将P的地址传递给point函数然后point函数将P的指针+3得到P地址所指向的值变成了c字符就这样...
回复

使用道具 举报

千问 | 2008-10-29 15:29:08 | 显示全部楼层
此p非彼p,两个p不是同一个变量,请查看"变量的作用域"一节这样可以理解吗?point(char *q) { q+=3; } main() { char b[4]={'a','b','c','d'}, *p=b; point(p); printf("%c\n",*p); }实参能传形参形参不能传实参!这个函数不起任何作用...
回复

使用道具 举报

千问 | 2008-10-29 15:29:08 | 显示全部楼层
数组首地址.*P表示的是值了....
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行