2017-04-06 93 views
-1

,所以我開始在C編程現在我有一個指針問題:改變價值

int * diff(){ 
    int array[2] = {1,2}; 
    return array; 
} 

int main(int argc, char const *argv[]) { 
    int *p; 
    p = diff(); 
    printf("%d\n", *(p)); 
    printf("%d\n", *(p)); 

    return 0; 
} 

因此啓動該程序後。我的終端顯示如下:

1 
0 

那麼爲什麼* p的值會改變?

+2

返回指向局部變量==未定義行爲的指針。 –

+1

@Downvoters,由於這個問題寫得很好,並且有一個很好的代碼片段,所以有點苛刻。作爲初學者,很難調出搜索條件。 – Bathsheba

回答

1

您的程序的行爲是undefined

array具有自動存儲持續時間(非正式地,將其視爲「局部變量」),並且取消引用返回到main的指針是語言不允許的。

(我們稱之爲懸掛指針)。

+0

先生,nitpick:_「取消引用指向返回到main的指針不被語言」_「所允許,那麼語言永遠不會阻止你,它說它將是UB。 –