靜態變數與動態變數

2021-08-22 03:19:35 字數 2468 閱讀 9751

1)靜態儲存變數通常是在變數定義時就分定儲存單元並一直保持不變,直至整個程式結束。靜態變數,全域性動態變數都是靜態儲存

2)動態儲存變數是在程式執行過程中,使用它時才分配儲存單元,使用完畢立即釋放

3)靜態儲存變數是一直存在的,而動態儲存變數則時而存在時而消失。通常把由於變數儲存方式不同而產生的特性稱為變數的生存期

4)靜態儲存只會初始化一次

定義或者宣告變數時,沒有static修飾符的就是動態變數,有static修飾符的就是靜態變數

2.1全域性變數

1)在所有函式的外部定義(包括主函式),定義之後的所有函式都能使用,屬於靜態儲存

2)作用域為整個專案,即最終編譯成可執行檔案的所有檔案中均可以使用動態全域性變數。外部檔案可以通過extern關鍵字來宣告另乙個檔案中存在的全域性變數

3)生命週期為從程式執行到程式退出,即貫穿整個執行時間

4)無顯式初始化時預設初始化值為0

看乙個有關全域性變數多檔案的例子:

main.cpp

#include using namespace std;

int var_a = 0;

void fun1();

void fun2();

void fun0()

int main()

variable1.cpp

#include using namespace std;

extern int var_a;

void fun1()

variable2.cpp

#include using namespace std;

extern int var_a;

void fun2()

執行結果:

可以發現,全域性變數var_a在所有檔案中都共享,每個檔案都可以訪問它並修改它的值

2.2區域性變數

1)在函式內部定義,屬於動態儲存,其他函式不能訪問,外部檔案也不能訪問,否則會出現:

2)作用域為當前函式,從定義位置,到其所在的{}的結束位置

3)生命週期為從函式呼叫到函式退出

4)無顯式初始化時預設初始化值為隨機值

3.1靜態全域性變數

1)作用域為當前檔案,從定義/宣告位置到檔案結尾

2)生命週期為從程式執行到程式退出,即貫穿整個執行時間

3)無顯式初始化時預設初始化值為0

靜態全域性變數與動態全域性變數的主要不同:

動態全域性變數可以通過extern關鍵字在外部檔案中使用,但靜態全域性變數不可以在外部檔案中使用。靜態全域性變數相當於限制了動態全域性變數的作用域

看乙個例子:

#include using namespace std;

static int b = 10;

void fun()

int main()

得到結果:

為什麼得到5個0呢,為什麼不是0,1,2,3,4呢

這是因為在函式fun中定義了乙個動態區域性變數a,而a同時又是靜態全域性變數,在這種情況下,作用域小的掩蓋作用域大的,所以區域性變數會掩蓋全域性變數。所以動態區域性變數a掩蓋了靜態全域性變數a

3.2靜態區域性變數

1)作用域為當前函式,從定義位置,到其所在的{}的結束位置

2)生命週期為從程式執行到程式退出,即貫穿整個執行時間,當下次函式呼叫時,靜態區域性變數不會被再次初始化,而是沿用上次函式退出時的值

靜態區域性變數與動態區域性變數的主要不同:

兩者作用域相同,都在函式內部,但是兩者生命週期不一樣,靜態區域性變數的生命週期是到程式的結束,而動態區域性變數的生命週期是函式的結束,靜態區域性變數的生命週期更長,同時靜態區域性變數只會初始化一次,函式重複呼叫,但靜態區域性變數不會被重新初始化

看一段**:

#include using namespace std;

void fun()

int main()

執行結果:

得到這樣的結果也是自然的

c語言動態變數與靜態變數的區別

c和c++中全域性變數,區域性變數,靜態變數和常量

靜態變數與動態變數

1 靜態儲存變數通常是在變數定義時就分定儲存單元並一直保持不變,直至整個程式結束。靜態變數,全域性動態變數都是靜態儲存 2 動態儲存變數是在程式執行過程中,使用它時才分配儲存單元,使用完畢立即釋放 3 靜態儲存變數是一直存在的,而動態儲存變數則時而存在時而消失。通常把由於變數儲存方式不同而產生的特性...

靜態變數和動態變數

首先,變數的儲存型別可分為四類 自動型別 auto 暫存器型別 register 靜態型別 static 外部型別 extern 動態變數 自動型別 auto 暫存器型別 register 靜態變數 靜態型別 static 外部型別 extern 屬於動態全域性變數,可以省略auto識別符號,因此,...

靜態儲存 動態儲存 靜態變數與動態變數

動態變數 int a 靜態變數 static int a 靜態變數,全域性動態變數都是靜態儲存,儲存在全域性資料區,在變數定義時就分定儲存單元並一直保持不變,直至整個程式結束。靜態儲存變數是一直存在的,只會初始化一次。區域性動態變數是動態儲存,動態儲存變數是在程式執行過程中,使用它時才分配儲存單元,...