C++中變數的型別

見賢思齊,見不賢而內自省發表於2015-09-21
C++變數的作用域有多種,綜述:
(1)作用域為全域性的變數在定義位置到檔案結尾之間都可用
(2)自動變數的作用域為區域性
(3)靜態變數的作用域是全域性還是區域性取決於它是如何被調定義的


1.自動變數
a.函式中宣告的函式引數和變數
b.程式碼塊中定義的變數
 C++編譯器對自動變數的實現為,程式留出一段記憶體,並將其視為棧(由於新資料放在原資料的上面,且新資料會最先被銷燬,類似棧),當程式使用完該自動變數時,會將其從棧中刪除。當函式或者程式碼塊執行結束的時候,自動變數將不再存在


2.靜態變數
靜態變數提供了3中連結性:
外部連結性(可在其他檔案中訪問):在程式碼塊的外部宣告
內部連結性(只能在當前檔案中訪問):在程式碼塊的外部宣告,且使用static限定符
無連結性(只能在當前函式或程式碼塊中訪問):在程式碼塊內宣告,且使用static限定符
不論哪種連結性變數,在整個程式的執行過程中,會一直存在,與自動變數相比,它們的壽命更長。如果未進行初始化,編譯器將其初始化為0;


自動變數和靜態變數最大的區別在於:編譯器對兩者的處理不一樣,對自動變數,採用棧;對靜態變數,編譯器將分配固定的記憶體塊來儲存所有的靜態變數,這些變數在整個程式的執行期間一直存在。


C++提供兩種變數的宣告:
一種是定義宣告,即定義;它給變數分配儲存空間,可進行初始化,有兩種方式
Int a;
Extern int a = 1;//進行初始化
另一種是引用宣告,它不給變數分配儲存空間


如果在多個檔案中使用外部變數(全域性,且具有外部連結性),只需在一個檔案中包含該變數的定義,但在使用該變數的其他所有檔案中,都必須使用關鍵字extern宣告它。

相關文章