您的位置:首页 > 编程语言 > C语言/C++

c++函数返回局部变量

2015-08-22 15:22 351 查看
char* func()
{
char arr[] = "Hello,World\n"; // arr[] 所有元素保存在栈内存上
return arr;  // 返回局部变量或临时变量的地址
/*即返回了指向栈内存的指针,而返回后栈内存都会被自动回收,main里面接收到的地址指向的内存已经不存在,变为野指针 */
}
int main()
{
printf("%s", func());  // 打印出垃圾数据,也可能打印出 "Hello,World,取决于编译器对栈内存回收的处理方法
return 0;
}


改进方法如下:

char* func()
{
char *arr = "Hello,World\n";    // "Hello,World\n" 保存在只读常量区,非栈内存不受函数返回影响
return arr;   // 其实返回的是 arr 的副本,返回后 arr 变量也销毁,但是其指向常量区不受影响
}
int main()
{
printf("%s", func());   // 能打印出 Hello,World
getchar();
return 0;
}


char* func()
{
static char arr[] = "Hello,World\n";    // "Hello,World\n" 保存在静态存储区,非栈内存不受函数返回影响。
return arr;  //返回指向静态存储区的指针
}
int main()
{
printf("%s", func());   // 能打印出 Hello,World
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息