请问下函数里面的指针变量是定义在堆空间还是栈空间
char *mytest(){
char *str="qwer";
return str;
}
char *mytest1(){
char *str="qwer";
return str;
}
int main(void) {
char *ret;
char *ret1;
ret = mytest();
ret1=mytest1();
printf("ret=%s--------ret1=%s",ret,ret1);
return 1;
}
为什么一个能打印,一个却不能打印,区别在那点啊?大哥大姐些,帮帮忙啊,谢谢了
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
return不要返回指向“栈内存”的“指针”或者“引用”,因为该内存在函 数体结束时被自动销毁。
第一个str指向内存常量区,第二个str指向str数组,数组在调用函数结束后,数组内存消失,返回的值找不到数组了,故出现乱码,第一个由于指向常量区,故不会出现乱码。
引用来自#4楼“zeussam”的帖子
1、测试了,两个都能取到值(环境:cygwin gcc 3.4.4),只不过这个返回值是常量指针不能改写。
2、指针变量是变量,变量的的生存周期跟其他变量规则没什么区别。而所指向的是地址,则有在堆和栈的区别,在堆上的是需要主动申请与释放,栈上的是受生存周期影响。
引用来自#2楼“夜游神”的帖子
你确定你发的贴 没问题?
......
函数 变量定义在栈空间上. 但是返回值会复制. 应该不是问题.
1、测试了,两个都能取到值(环境:cygwin gcc 3.4.4),只不过这个返回值是常量指针不能改写。
2、指针变量是变量,变量的的生存周期跟其他变量规则没什么区别。而所指向的是地址,则有在堆和栈的区别,在堆上的是需要主动申请与释放,栈上的是受生存周期影响。