本文通過代碼示例詳細講解 C 語言變量的作用域規則、生命週期、內存地址分佈方向,適合初學者建立正確的內存模型。
{} 內。})。從內層向外層逐級查找,找到最近的同名變量即停止。
int a = 100;
{ int a = 200; printf("%d", a); } // 輸出 200
printf("%d", a); // 輸出 100
工程建議:合理使用代碼塊 {} 限制變量作用域,讓內存及時釋放,提高緩存局部性。
int a = 100; // 地址 0x5FC3B3F4
int b = 200; // 地址 0x5FC3B3F0
// 差 4 字節,地址遞減
原因:x86 棧向下增長(地址遞減)。先定義的變量地址較高,後定義的較低。這與堆向上增長(地址遞增)形成對比。
| 屬性 | 局部變量 | 全局變量 |
|---|---|---|
| 定義位置 | 函數/塊內 | 文件頂層 |
| 作用域 | 塊級 | 文件級(從定義處起) |
| 生命週期 | 動態(棧) | 靜態(全程) |
| 默認值 | 無(垃圾值) | 0 |
| 存儲區 | 棧 | 全局/靜態區 |
理解這些基礎概念,是寫出無內存錯誤 C 代碼的前提。