先说明,在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;//这也是没有问题的 } 特别提示,动态内存的生存期有程序员本身决定。综上所述,能不能返回局部变量及其地址,主要看该变量在内存的存储位置,只要是在系统栈中存储的局部变量,通通不能够返回其地址,而在静态区/常量区或是堆区的变量,返回其地址是没有问题的,这是由变量的生存期决定的。