【C++】靜態持續變數?如何建立靜態持續變數?

人工智慧博士發表於2019-07-16

1. C++為靜態儲存持續性變數提供了3中連結性:

  • 外部連結性(可在其他檔案中訪問)
  • 內部連結性(只能在當前檔案中訪問)
  • 無連結性(只能在當前函式或程式碼塊中訪問)

由於靜態變數的數量在程式執行期間是不變的,因此程式不需要使用特殊的裝置(如棧)來管理它們

  1. 編譯器將分配固定的記憶體塊來儲存所有的靜態變數,這些變數在整個程式執行期間一直存在
  2. 如果沒有顯式地初始化靜態變數,編譯器將把它設定為0。
  3. 在預設情況下,靜態陣列和結構將每個元素或成員地所有位都設定為0。

2. 如何建立這3中靜態持續變數?

  • 要想建立連結性為外部的靜態持續變數,必須在程式碼塊的外面宣告它; 
  • 要想建立連結性為內部的靜態持續變數,必須在程式碼塊的外面宣告它,並且使用static限定符; 
  • 要想建立連結性為外部的靜態持續變數,必須在程式碼塊內宣告它,並且使用static限定符;

3. 程式舉例: 

int global = 1000;
static int one_file = 50;

int main() {
    ...
}   

void funct1(int n) {
    static int count = 0;
    int llama = 0;
    ...
}

void funct2(int q) {
    ...
}

程式解讀

global、one_file與count為靜態持續變數,在整個程式執行期間都存在。 

在funct1()中定義的count的作用域為區域性,沒有連結性,這意味著只能在funct1()函式中使用它,就像自動變數llama一樣。

然而,與llama不同的是,即使在funct1()函式沒有被執行時,count也留在記憶體中。 

global和one_file的作用域都為整個檔案,即在從宣告位置到檔案結尾的範圍內都可以被使用。

由於one_file的連結性為內部,因此只能在包含上述程式碼的檔案中使用它;

由於global的連結性為外部,因此可以在程式的其他檔案中使用它。 

所有的靜態持續變數都又下述初始化特徵:未被初始化的靜態變數的所有位都不被設定為0。這種變數被稱為零初始化的。

4. 5種變數儲存方式:

9.2.3

相關文章