猿问

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

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

qq_遁去的一_1

char*p="hello";其中的hello字符串是被预编译,存放与data段,是不会被销毁的;charp[]="hello";本质上是charp[6]="hello";这是一个局部变量,过期自动销毁了~

冉冉说

我按照你的写法,返回的都是正确的,返回hello.代码如下:编译环境gcc(tdm64-2)4.8.1includechar*GetMemoryOne(){char*p="hello";returnp;}char*GetMemoryTwo(){charp[]="hello";returnp;}intmain(){printf("%s\n",GetMemoryOne());printf("%s\n",GetMemoryTwo());return0;}
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答