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