[C++, CPP 教學 教程 教材 Tutorial] 變數 - 生命週期與生存空間(Life Cycle & Life Scope)
YehYeh\'s Notepad yehyeh@gmail.com 

[C++, CPP] 變數

生命週期與生存空間(Life Cycle & Life Scope)

生命週期與生存空間

生命週期是指變數存活的期間,即變數存活在記憶體的期間。
生存空間是指變數可被存取的程式碼區塊。
兩者意義接近,但一個是指存活時間(時間),一個是指活動範圍(空間),有著本質上的差異。
例如說有一個人活了70歲,而他出生在一個沒有飛機和船的海島國家,他的生命週期就是0~70歲這段時間,生存空間就是他出生的國家。

  • 敘述區塊(Statement Block):被大括號框住的程式碼通常稱為區塊或敘述區塊
  • 生命週期(Life Cycle):每個變數都會有其存在期間(Storage Duration),執行時變數存活的時間
    • 自動存在期間:自動變數
    • 靜態存在期間:全域變數、靜態變數
    • 動態存在期間
  • 生存空間(Scope):變數可被存取的程式碼區段
    • 區域變數:又叫自動變數(Automatic Variable)
      • 生命週期與生存空間:起始於變數宣告,結束於宣告敘述所在的區塊的大右括號。
      • 同一區塊內不可宣告同名的區域變數
      • 可用auto關鍵字宣告自動變數,但因預設值就是auto,所以通常都不需要加auto
      • 在生命週期內會佔用記憶體
    • 全域變數(Global Variable)
      • 宣告在所有區塊和類別之外的變數
      • 不可宣告同名的全域變數
      • 若沒有給定初始值,會自動給0
      • 生命週期:在程式執行到程式結束期間都會暫用記憶體
      • 生存空間:從宣告後的任意程式碼區塊都可存取
    • 靜態變數(Static Variable)
      • 以關鍵字static修飾的變數
      • 宣告一個靜態變數num,並指派初始值為0
        static int num = 0;
        
      • 不可宣告同名的靜態變數
      • 若沒有給定初始值,會自動給0
      • 生命週期:在程式執行到程式結束期間都會暫用記憶體
      • 生存空間:任意程式碼區塊皆可存取
    • 當一個區塊宣告一個和全域變數同名的區域變數時
      • 直接存取到的變數為區塊變數
      • 加上範圍運算子::可存取到全域變數
變數範例