1. 程式人生 > 其它 >關於 C/C++ 中函式能否返回指標的問題

關於 C/C++ 中函式能否返回指標的問題

剛才在看 C++ Primer 發現在函式那一章講函式返回值時, 對於返回值能否是引用或指標的問題進行了解答. 但是描述的不是很具體, 在翻閱了一些部落格後在此做個簡單的筆記

結論 : 函式能否返回指標, 取決於指標指向物件的狀態.

1. 指標如果指向一個區域性變數, 那麼函式執行完畢後返回的值是不確定的.

#include <cstdio>

using namespace std;

int *back()
{
    int x = 1;
    int *p = &x;
    
    return p;
}

int *BACK()
{
    int x = 2;
    int *p = &x;
    
    return p;
}

int main(void)
{
    int *p = back();
    printf("%d\n", *p);	// 輸出1
    
    int *q = BACK();
    printf("%d\n", *p); // 輸出2
    
    return 0;
}

2. 如果指標指向的值為靜態變數, 或者是堆上的一塊空間, 那麼函式執行完畢後其變數值或所在記憶體區域依然存在.

#include <cstdio>
#include <cstdlib>

using namespace std;

int *back()
{
    static int x = 1;
    int *p = &x;

    return p;
}

int *BACK()
{
    int x = 2;
    int *p = &x;

    return p;
}

int *heap()
{
    int *p = (int *)malloc(sizeof(int));

    return p;
}

int *HEAP()
{
    int *p = (int *)malloc(sizeof(int));

    return p;
}

int main(void)
{
    int *p = back();
    printf("%d\n", *p); //輸出 1

    int *q = BACK();
    printf("%d\n", *p); //輸出依然是 1

    p = heap();
    printf("%p\n", p);  //輸出00000000001c13f0
    q = HEAP();
    printf("%p\n", p);  //輸出依然是00000000001c13f0

    return 0;
}