C语言返回地址的问题

fivezero50 2016-07-15 09:33:38
以下2个函数为什么一个可以返回地址,一个不可以?
#include "stdlib.h"
#include "stdio.h"
char *return_1(void)
{
char x[12] = "1111";
return x;
}

char *return_2(void)
{
char *x = "2222";
return x;
}
int main(void)
{
char *str;
str = return_2();
printf("%s",str);
system("pause");
}

为什么我用return_1就不行,return_2就行,据我的理解,return_1函数的x数组在该函数调用结束后就自动释放了,所以不能当成地址返回,为什么return_2函数没有同样的问题?

...全文
311 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
Happy_BC 2016-07-15
  • 打赏
  • 举报
回复
看了楼上的回答, 我总结下自己的看法不知道对不对 1、返回局部变量的指针(除静态变量),一般会出错,因为它在栈中,函数结束后空间会被回收利用。 2、返回动态内存指针(比如malloc),可正常使用。 因为它在堆中,不会因函数结束而回收。 3、返回常数及静态指针,比如楼主这里的字串常量。可正常使用。因为它在静态存储区。
小灸舞 版主 2016-07-15
  • 打赏
  • 举报
回复
return_2中的"2222"是个常量字符串,这个字符串被当作常量而且被放置在此程序的内存静态区,不会因为return_2调用结束就被销毁

而你的return_1返回的是局部变量的地址,所以发生什么都不要觉得奇怪。

69,368

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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