首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> 關於C

C語言變數儲存類別全解析:全域、區域、static、static區域

     編輯:關於C

四大儲存類別對比

類別關鍵字作用域生命週期預設初值儲存區
全域變數(無)全檔案 (extern 可跨檔)程式啟動~結束0資料段 (.data/.bss)
區域變數(無)/auto區塊 { }進入區塊~離開區塊未定義 (垃圾值)堆疊
靜態全域static僅本檔案 (內部連結)程式啟動~結束0資料段
靜態區域static區塊 { }程式啟動~結束0資料段
暫存器register區塊區塊垃圾值CPU 暫存器 (建議)

程式碼驗證三種 static 行為

1. 靜態全域變數 (檔案作用域 static)

static int g_count = 0; // 僅本 .c 可見
void func() { g_count++; }

2. 區域變數 (預設 auto)

void func() {
    int count = 0; // 每次呼叫重新建立、銷毀
    for(int i=0;i<10;i++) count++;
    printf("%d ", count); // 每次印 1
}

3. 靜態區域變數 (關鍵:只初始化一次!)

void func() {
    static int count = 0; // 程式啟動時初始化 0,之後保持值
    for(int i=0;i<10;i++) count++;
    printf("%d ", count); // 印 1 2 3 ... 10
}

核心區別總結

  • 區域變數:每次呼叫重置,適合暫時計算。
  • 靜態區域變數:跨呼叫保持狀態,適用於計數器、單例模式、快取、遞迴深度追蹤。
  • 靜態全域/函數:隱藏實作細節**,避免符號衝突,模組化關鍵。
  • 全域變數:慎用,造成耦合、難測試、執行緒不安全。

記憶體佈局圖示

高位址
|  堆疊 (區域、參數、返回位址)  |  向下增長
|        ...                     |
|  堆 (malloc/free)              |  向上增長
|  BSS (未初始化全域/static)     |
|  DATA (已初始化全域/static)    |
|  程式碼段 (.text)              |
低位址
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved