关于指针的一个简单问题。

码定乾坤 2003-08-19 10:54:56
void fun(char*s)
{
s="sdfsdf";
}
main()
{
char * s=NULL;
fun(s);

}
可是结果s=NULL
这是怎么回事?
...全文
33 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
gogo168 2003-08-19
  • 打赏
  • 举报
回复
同意windlyzhang(大家共勉) 和Tiejun_Chenfang
Tiejun_Chenfang 2003-08-19
  • 打赏
  • 举报
回复
void fun(member* &m) &代表是引用,可以把修改带出来
码定乾坤 2003-08-19
  • 打赏
  • 举报
回复
谢谢windlyzhang(大家共勉)
改了后可以了
不过我的方法为什么不可以
windlyzhang 2003-08-19
  • 打赏
  • 举报
回复
修改后的函数如下:

void fun(member* &m)
{
member * list;
list =new member;
list->member_name="名字";
m=list;
}

调用:

member * my;
fun(my);
Tiejun_Chenfang 2003-08-19
  • 打赏
  • 举报
回复
zahuifan(杂烩饭) ,你的代码太。。。。。
void fun(char*s)
{
s = new char[7];
s="sdfsdf";
}

结果带不出来不说,还会使得系统产生7个字节的内存泄漏

starstargao
楼上的都可以,你真是难得糊涂啊

支持 netsys2(来电),或者这样,

void fun(char ** ps)
{
if (*ps!=NULL) delete [] (*ps) ;
*ps=new char [strlen("sdfsdf")+1];
strcpy(*ps,"sdfsdf");
}

main()
{
char *s=NULL;
fun(&s);

//别忘了delete [] s;
}


对于

void fun(member * * m)
{
member * list;
list =new member;
list->member_name="名字";
*m=list;
}

member * my=NULL;
fun(&my);

记住一个原则:
想让函数改什么,就传什么的指针,(特例:改指针,就传指针的指针)


Tiejun_Chenfang 2003-08-19
  • 打赏
  • 举报
回复
zahuifan(杂烩饭) ,你的代码太。。。。。
void fun(char*s)
{
s = new char[7];
s="sdfsdf";
}

结果带不出来不说,还会使得系统产生7个字节的内存泄漏

starstargao
楼上的都可以,你真是难得糊涂啊

支持 netsys2(来电),或者这样,

void fun(char ** ps)
{
if (*ps!=NULL) delete [] (*ps) ;
*ps=new char [strlen("sdfsdf")+1];
strcpy(*ps,"sdfsdf");
}

main()
{
char *s=NULL;
fun(&s);

//别忘了delete [] s;
}


对于

void fun(member * * m)
{
member * list;
list =new member;
list->member_name="名字";
*m=list;
}

member * my=NULL;
fun(&my);

记住一个原则:
想让函数改什么,就传什么的指针,(特例:改指针,就传指针的指针)


freshman2003 2003-08-19
  • 打赏
  • 举报
回复
我觉得你这样用不合逻辑,不如这样给指针变量赋值。
member * fun()
{
member * list;
list =new member;
list->member_name="名字";
return list;
}

member * my=NULL;
my = fun();
这样符合思维习惯,也不会出错。

Tiejun_Chenfang 2003-08-19
  • 打赏
  • 举报
回复
zahuifan(杂烩饭) ,你的代码太。。。。。。。

void fun(char*s)
{
s = new char[7];
s="sdfsdf";
}

不仅东西带不出去,还会使得系统出现7个字节的内存泄漏,


支持 netsys2(来电) 或者这样

void fun(char** ps)
{
if (*ps!=NULL)
delete [] (*ps);
*ps=new char[strlen("sdfsdf")+1];
strcpy(*ps,"sdfsdf");
}
main()
{
char * s=NULL;
fun(&s);

//用完了,要delete [] s;
}

码定乾坤 2003-08-19
  • 打赏
  • 举报
回复
谢谢各位帮忙

我的情况是这样的。
我定义一
strunct member
{
String member_name;
member * next;
}
这样一个连

我有个函数是建立连的
void fun(member * m)
{
member * list;
list =new member;
list->member_name="名字";
m=list;
}

member * my=NULL;
fun(my);
可是fun(my)后my还是NULL;
请各位帮忙
zjqyb 2003-08-19
  • 打赏
  • 举报
回复
楼上的朋友
s = new char[7];
s="sdfsdf";
基本上是误人子弟
starstargao 2003-08-19
  • 打赏
  • 举报
回复
楼上的都可以
zahuifan 2003-08-19
  • 打赏
  • 举报
回复
你应该先分配内存:
void fun(char*s)
{
s = new char[7];
s="sdfsdf";
}

不过建议你用更好用的 AnsiString

void fun(AnsiString & s)
{
s="sdfsdf";
}
netsys2 2003-08-19
  • 打赏
  • 举报
回复
void fun(char*s)
{
s="sdfsdf";
}

s指向的是函数内部局部变量,函数退出后失去数据。

应该:

void fun(char*s)
{
strcpy(s,"sdfsdf");
}
main()
{
char s[100];
fun(s);

}

13,824

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧