为了账号安全,请及时绑定邮箱和手机立即绑定

返回局部变量char *p和char p[]的区别

返回局部变量char *p和char p[]的区别

叮当猫咪 2019-04-08 09:21:46
自定义函数内部声明局部变量并返回地址,然后将另外一个变量指向返回地址,char*和char[]为什么结果不同?char*GetMemory(){char*p="hello";returnp;}char*GetMemory(){charp[]="hello";returnp;}上述函数通过printf(%s\n,GetMemory());的返回值分别为:1、hello2、乱码请问这是什么原因?另外,如果我这样写:char*str=NULL;str=GetMemory();是不是错误的?(在别的地方看到的,自己不是很确定)
查看完整描述

2 回答

?
qq_遁去的一_1

TA贡献1725条经验 获得超7个赞

char*p="hello";
其中的hello字符串是被预编译,存放与data段,是不会被销毁的;
charp[]="hello";
本质上是
charp[6]="hello";
这是一个局部变量,过期自动销毁了~
                            
查看完整回答
反对 回复 2019-04-08
?
冉冉说

TA贡献1877条经验 获得超1个赞

我按照你的写法,返回的都是正确的,返回hello.
代码如下:
编译环境gcc(tdm64-2)4.8.1
include
char*GetMemoryOne()
{
char*p="hello";
returnp;
}
char*GetMemoryTwo()
{
charp[]="hello";
returnp;
}
intmain()
{
printf("%s\n",GetMemoryOne());
printf("%s\n",GetMemoryTwo());
return0;
}
                            
查看完整回答
反对 回复 2019-04-08
  • 2 回答
  • 0 关注
  • 539 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信