我在 C 中發現了一些有趣的問題。
這是我的代碼
#include <stdio.h>
void method()
{
int indx;
printf("%d\n", indx);
indx ;
}
int main(void)
{
method();
method();
method();
}
這是一個簡單的例子。indx 變數未初始化。因此,方法函式中 printf 的結果將是一些奇怪的值。
indx 是區域變數。所以 indx 沒用。但答案是
0
1
2
似乎索引仍然是
我無法理解的。為什么?
uj5u.com熱心網友回復:
區域變數存盤在堆疊中。因為您在每個函式呼叫之間沒有執行任何其他操作,所以堆疊在呼叫之間基本上被保留(未更改),并且缺乏初始化意味著 的值indx是恰好存盤在該堆疊位置中的任何內容。
如果您進行了其他函式呼叫,堆疊很可能會被覆寫,從而導致非順序值,并且可能不是從零開始。
堆疊在啟動時可能包含零值的一個原因可能是,根據編譯器、編譯器選項和標準庫啟動,堆疊可能被故意初始化為零(或者只是因為使用的記憶體區域恰好包含來自前一個應用程式等)。
永遠不應該依賴這種行為,它特別是未定義的行為,因此初始化變數并確保您了解變數范圍是軟體開發中學習的重要內容。
我認為有很多關于堆疊如何在軟體開發語言中使用的描述(以及硬體架構和實作的可變性),您應該單獨研究。
uj5u.com熱心網友回復:
區域變數特別存盤在相應函式的記憶體區域中,因此每次呼叫函式時,您都可以看到索引值增加了單個值。
但答案回傳存盤變數的記憶體值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/472112.html
下一篇:在單個回圈內的兩個陣列之間迭代
