先說明,在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;//這也是沒有問題的 } 特別提示,動態內存的生存期有程序員本身決定。綜上所述,能不能返回局部變量及其地址,主要看該變量在內存的存儲位置,只要是在系統棧中存儲的局部變量,通通不能夠返回其地址,而在靜態區/常量區或是堆區的變量,返回其地址是沒有問題的,這是由變量的生存期決定的。