【C++】靜態持續變數?如何建立靜態持續變數?
1. C++為靜態儲存持續性變數提供了3中連結性:
- 外部連結性(可在其他檔案中訪問)
- 內部連結性(只能在當前檔案中訪問)
- 無連結性(只能在當前函式或程式碼塊中訪問)
由於靜態變數的數量在程式執行期間是不變的,因此程式不需要使用特殊的裝置(如棧)來管理它們
- 編譯器將分配固定的記憶體塊來儲存所有的靜態變數,這些變數在整個程式執行期間一直存在
- 如果沒有顯式地初始化靜態變數,編譯器將把它設定為0。
- 在預設情況下,靜態陣列和結構將每個元素或成員地所有位都設定為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
相關文章
- 靜態持續變數變數
- 靜態變數和非靜態變數變數
- 靜態變數變數
- 靜態變數與靜態方法變數
- C/C++ 靜態變數解析C++變數
- 靜態變數和Session變數Session
- C++ static variable(靜態變數) 學習C++變數
- C語言區域性變數、全域性變數、靜態區域性變數、靜態全域性變數C語言變數
- 區域性變數和全域性變數(靜態和非靜態)區別變數
- static靜態變數的理解變數
- js中的靜態變數JS變數
- 靜態全域性變數和全域性變數變數
- 靜態變數和例項變數區別?變數
- Java靜態變數在靜態方法內部無法改變值Java變數
- PHP類的靜態(static)方法和靜態(static)變數PHP變數
- Spring如何為靜態變數注入值Spring變數
- 全域性變數和靜態變數的區別變數
- 函式的靜態變數 static函式變數
- Java靜態變數塊使用案例Java變數
- PHP的靜態變數介紹PHP變數
- VBA靜態變數與常量(轉)變數
- C#靜態建構函式及靜態變數學習C#函式變數
- Java自學入門之靜態變數Java變數
- 遞迴程式中的靜態變數遞迴變數
- asp.net中使用靜態變數ASP.NET變數
- C++類的靜態成員變數初始化C++變數
- PLSQL Language Referenc-PL/SQL靜態SQL-游標變數-建立游標變數SQL變數
- C++ 靜態變數什麼時候完成初始化C++變數
- Java逆向基礎之靜態變數存取Java變數
- C語言--靜態區域性變數C語言變數
- java優化程式設計-靜態變數Java優化程式設計變數
- java靜態變數和靜態函式是否可以被繼承,重寫!Java變數函式繼承
- 避免因在類中使用靜態函式而大量使用靜態變數 (轉)函式變數
- 繫結變數在靜態sql和動態sql中變數SQL
- 成員變數、全域性變數、例項變數、類變數、靜態變數和區域性變數的區別變數
- 關於例項變數和靜態變數的一點疑問變數
- JNI/NDK開發指南(7):C/C++訪問Java例項變數和靜態變數C++Java變數
- 對於systemverilog靜態變數和動態變數 ,描述不正確的是()。變數