變數的生命週期與作用域

2021-09-23 18:08:51 字數 1390 閱讀 9779

變數的型別

區域性變數和全域性變數

對於c++變數來說,有兩個屬性非常重要:作用域和生命週期,它們從兩個不同的維度描述了乙個變數的時間和空間。區域性變數也稱為內部變數。 區域性變數是在函式內作定義說明的。其作用域僅限於函式內, 離開該函式後再使用這種變數是非法的。

全域性變數也稱為外部變數,它是在函式外部定義的變數。它不屬於哪乙個函式,它屬於乙個源程式檔案。其作用域是整個源程式。在函式中使用全域性變數,一般應作全域性變數說明。 只有在函式內經過說明的全域性變數才能使用。全域性變數的說明符為 extern。但在乙個函式之前定義的全域性變數,在該函式內使用可不再加以說明。

從變數的作用域(全域性作用域,區域性作用域,檔案作用域)(即從空間)角度來分,可以分為全域性變數(靜態全域性變數的作用域是該檔案範圍(檔案作用域)區域性變數。        

從另乙個角度,從變數值存在的作時間(即生存期)角度來分,可以分為靜態儲存方式和動態儲存方式。可見生存週期只是和變數儲存的位置相關。

auto變數:

函式中的區域性變數,如不專門宣告為 static 儲存類別,都是動態地分配儲存空間的,資料儲存在動態儲存區中。函式中的形參和在函式中定義的變數(包括在復合語句中定義的變數),都屬此類,在呼叫該函式時系統會給它們分配儲存空間,在函式呼叫結束時就自動釋放這些儲存空間。這類區域性變數稱為自動變數。自動變數用關鍵字 auto 作儲存類別的宣告。

關鍵字 auto可以省略,auto 不寫則隱含定為「自動儲存類別」,屬於動態儲存方式。 

不同生命週期的變數,在程式記憶體中的分布位置是不一樣的。乙個程式的記憶體分為**區、全域性資料區、堆區、棧區,不同的記憶體區域,對應不同的生命週期。 

變數的作用域與生命週期分類:

全域性變數

int g_ivalue = 1;  

extern int g_ivalue;  

int main()  

全域性靜態變數

const int ivalue_1;  

static const int ivalue_2;  

static int ivalue_3;  

int main()  

靜態區域性變數

void function()  

區域性變數掌握static關鍵字的使用很關鍵。以下是別人的一些經驗之談:

作用域與生命週期

作用域與生命週期是描述了常量,變數,函式的等物件的使用範圍,當程式 中這些物件一旦超過了這個範圍,那麼將出現編譯錯誤。下面我們來研究一下它 區域性作用域描述的是函式體中變數和函式的適用範圍,每乙個函式都有自己的區域性作用域。在函式體中定義的變數,函式對於外部函式是不可見的看,因為他們在函式的區域性作...

作用域與生命週期

在c 語言中名字有作用域,物件 變數 有生命週期。如果不理解這兩個概念那麼我們一般會犯很多低階的錯誤。比如返回區域性物件的引用等。include using namespace std return local array int func1 return a return local object...

變數的作用域和生命週期

了解並掌握變數的作用域和生命週期。作用域 scope 程式設計概念,通常來說,一段程式 中所用到的名字並不總是有效 可用的 而限定這個名字的可用性的 範圍就是這個名字的作用域。例如 1 區域性變數的生命週期是 進入作用域生命週期開始,出作用域生命週期結束。2 全域性變數的生命週期是 整個程式的生命週...