C/C++學習之路(三)C++關於返回局部變量的問題

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