先说明,在C/C++中,程序的局部变量存储在栈中,在函数运行结束后,系统栈中的内容会被释放,此时如果返回局部变量的值,那么不会有任何问题,但如果返回地址,就有可能会出现问题。
如果一定要返回地址,那么以下是一些可能出现的情况:
一.存储在常量区的内容可以被返回
char *myfunc()
{
char *p="aaaaa";
return p;//这样是可以的,因为字符串常量存储在常量区
//存储位置类似于static成员,在程序运行结束后不会被销毁
}
char *myfunc2()
{
char p[]="aaaaa";
return p;//这样不行,因为p指向的空间的内容已经被释放
}
二.static可以被返回
char *myfunc3()
{
static char p[]="aaaaa";
return p;//这样是可以的,因为p指向的内容存储在常量区
}
三.返回一个值一定是没问题的
char myfunc4()
{
int a=5;
retutn a;//返回一个值是没问题的
}
四.返回指向堆的指针也是没问题
node *myfunc5()
{
node* head = new Node;
head->data = 5;
head->next = nullptr;
return head;//这也是没有问题的
}
特别提示,动态内存的生存期有程序员自己决定。综上所述,能不能返回局部变量及其地址,主要看该变量在内存的存储位置,只要是在系统栈中存储的局部变量,统统不可以返回其地址,而在静态区/常量区或是堆区的变量,返回其地址是没有问题的,这是由变量的生存期决定的。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。