[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
- 生命週期:在程式執行到程式結束期間都會暫用記憶體
- 生存空間:任意程式碼區塊皆可存取
- 當一個區塊宣告一個和全域變數同名的區域變數時
- 直接存取到的變數為區塊變數
- 加上範圍運算子::可存取到全域變數
- 區域變數:又叫自動變數(Automatic Variable)