簡體   English   中英

無法理解此代碼堆棧存儲函數調用c的輸出

[英]Can't understand the output of this code stack storage function call c

我有以下代碼,但是我不明白什么以及為什么它輸出它的作用。

int main(){
   int *i;
   int *fun();
   i=fun();
   printf("%d\n",*i);
   printf("%d\n",*i);
}

int *fun(){ 
   int k=12;
   return(&k);
}

輸出為12和一個垃圾值。 有人可以解釋輸出嗎?

它不應該兩次都返回垃圾值嗎?

我知道k對於fun()是局部的,因此它將存儲在堆棧中,並且當fun()超出范圍時,它將被銷毀。 我在這里想念什么概念?

它不會兩次都返回垃圾值嗎?

在返回funk不再存在,因此打印存儲在k地址中的值是未定義的行為

這就是為什么您擁有不同的/垃圾價值的原因。

k是fun()的局部變量,因此它將存儲在堆棧中,並且當樂趣結束時,激活將被破壞,或者我是否缺少某些概念?

您不會丟失任何東西,除了事實,即棧不會立即“廢除”或類似的東西。 換句話說,在fun返回之后,編譯器可以使用該內存自由執行任何所需的操作。

當函數返回時不會立即清除堆棧,因此在fun()返回之后12仍將在堆棧上-直到其他人覆蓋了它。

您將在不同的編譯器和不同的構建選項(調試與發行版)中看到不同的結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM