回 帖 发 新 帖 刷新版面

主题:[讨论]求正解:一道C指针程序题

#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个回复)

沙发

注意指针传址的含义,函数结束指针msg的值并没有变。
如果硬要按lz这么用,可以这么用
char *ChMsg(void)
{
    return NULL;
}
msg = chMsg;

板凳

如果不使用引用符号,那么C/C++永远都是传值。
chmsg(char *message)
它的意义是:
可以改变message的内容,但改变message的指向是无法做到的。

3 楼

你这个是向形参进行值传递,实际参数的值是不会改变
所以Msg指向的内容没有改变,所以下面的结果是不会得到
预定结果的~~
你可以用引用传递试试,在ChMsg时加上“&”符号,即ChMsg(char *&message)

4 楼

[quote]如果不使用引用符号,那么C/C++永远都是传值。
chmsg(char *message)
它的意义是:
可以改变message的内容,但改变message的指向是无法做到的。[/quote]

5 楼

把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 楼


你的指针是个形参,形参啊~你可以通过指针改变它指向的内容,也就是字符串的值,但是指针本身的值,还需要一个指向指针的指针来改变。

7 楼

[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]

我来回复

您尚未登录,请登录后再回复。点此登录或注册