请问下函数里面的指针变量是定义在堆空间还是栈空间

发布于 2021-11-05 01:03:25 字数 880 浏览 730 评论 4

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

岁月打碎记忆 2021-11-09 16:25:13

return不要返回指向“栈内存”的“指针”或者“引用”,因为该内存在函 数体结束时被自动销毁。

第一个str指向内存常量区,第二个str指向str数组,数组在调用函数结束后,数组内存消失,返回的值找不到数组了,故出现乱码,第一个由于指向常量区,故不会出现乱码。

月亮是我掰弯的 2021-11-09 11:08:46

引用来自#4楼“zeussam”的帖子

1、测试了,两个都能取到值(环境:cygwin gcc 3.4.4),只不过这个返回值是常量指针不能改写。

2、指针变量是变量,变量的的生存周期跟其他变量规则没什么区别。而所指向的是地址,则有在堆和栈的区别,在堆上的是需要主动申请与释放,栈上的是受生存周期影响。

猫九 2021-11-09 09:58:21

引用来自#2楼“夜游神”的帖子

你确定你发的贴 没问题?

    ......

 函数 变量定义在栈空间上. 但是返回值会复制. 应该不是问题. 

彩扇题诗 2021-11-08 16:59:26

1、测试了,两个都能取到值(环境:cygwin gcc 3.4.4),只不过这个返回值是常量指针不能改写。

2、指针变量是变量,变量的的生存周期跟其他变量规则没什么区别。而所指向的是地址,则有在堆和栈的区别,在堆上的是需要主动申请与释放,栈上的是受生存周期影响。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文