主题:[讨论]求正解:一道C指针程序题
ISBN76348
[专家分:0] 发布于 2011-04-09 20:10:00
#include"stdio.h"
char *Msg="HELLO";
void ChMsg(char *message)
{
message=NULL;
}
int main()
{
ChMsg(Msg);
if(!Msg)
printf("change ok");
else
printf("sorry");
getch();
return 0;
}
为什么输出的是 sorry?
怎样在只改变ChMsg()函数的情况下使程序输出 change ok?
回复列表 (共7个回复)
沙发
fragileeye [专家分:1990] 发布于 2011-04-09 20:41:00
注意指针传址的含义,函数结束指针msg的值并没有变。
如果硬要按lz这么用,可以这么用
char *ChMsg(void)
{
return NULL;
}
msg = chMsg;
板凳
cgl_lgs [专家分:21040] 发布于 2011-04-10 16:39:00
如果不使用引用符号,那么C/C++永远都是传值。
chmsg(char *message)
它的意义是:
可以改变message的内容,但改变message的指向是无法做到的。
3 楼
ucchen [专家分:80] 发布于 2011-04-12 20:44:00
你这个是向形参进行值传递,实际参数的值是不会改变
所以Msg指向的内容没有改变,所以下面的结果是不会得到
预定结果的~~
你可以用引用传递试试,在ChMsg时加上“&”符号,即ChMsg(char *&message)
4 楼
彬雪飞舞 [专家分:40] 发布于 2011-04-26 21:40:00
[quote]如果不使用引用符号,那么C/C++永远都是传值。
chmsg(char *message)
它的意义是:
可以改变message的内容,但改变message的指向是无法做到的。[/quote]
5 楼
看万山红遍 [专家分:0] 发布于 2011-04-27 09:33:00
把message定义成二级指针,即void ChMsg(char **message);
整个程序是:
#include<stdio.h>
char *Msg="HELLO";
void ChMsg(char **message)
{
*message=NULL;
}
int main()
{
ChMsg(&Msg);
if(!Msg)
printf("change ok");
else
printf("sorry");
//getch();
return 0;
}
6 楼
chb871013 [专家分:70] 发布于 2011-05-02 09:20:00
你的指针是个形参,形参啊~你可以通过指针改变它指向的内容,也就是字符串的值,但是指针本身的值,还需要一个指向指针的指针来改变。
7 楼
wanghujun [专家分:10] 发布于 2011-05-05 20:44:00
[url=http://www.cmd59.com/code/vb/]vb[/url]
[url=http://www.cmd59.com/code/vc/]vc[/url]
[url=http://www.cmd59.com/plus/list.php?tid=16]delphi[/url]
[url=http://www.cmd59.com/code/vb.net/]vb.net[/url]
[url=http://www.cmd59.com/code/cc/]C#[/url]
[url=http://www.cmd59.com/code/java/]java[/url]
[url=http://www.cmd59.com/Python]python[/url]
[url=http://www.cmd59.com/vb/]vb源码[/url]
[url=http://www.cmd59.com/yy]易语言源码[/url]
[url=http://www.cmd59.com/c++]VC 源码[/url]
[url=http://www.cmd59.com/delphi]delphi 源码[/url]
[url=http://www.cmd59.com/]编程资源网[/url]
[url=http://www.cmd58.com/]vb[/url]
我来回复