Code Bye

C语言返回地址的问题

以下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函数没有同样的问题?
解决方案

40

return_2中的”2222″是个常量字符串,这个字符串被当作常量而且被放置在此程序的内存静态区,不会原因是return_2调用结束就被销毁
而你的return_1返回的是局部变量的地址,所以发生什么都不要觉得奇怪。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明C语言返回地址的问题