C++ 中靜態變數、自動變數、全域性變數和區域性變數的區別
這裡有兩個不同的概念:
- 作用域,決定了可以在哪裡訪問名稱 - 全域性和區域性
- 儲存期,決定了變數何時建立和銷燬 - 靜態和自動
作用域
區域性變數只能被函式或程式碼塊內部的語句使用。區域性變數對於函式本身是未知的。
示例
#include <iostream>
using namespace std;
int main () {
// Local variable declaration:
int a, b;
int c;
// actual initialization
a = 10;
b = 20;
c = a + b;
cout << c;
return 0;
}
這將給出以下輸出:
輸出
30
全域性變數定義在所有函式之外,通常位於程式頂部。全域性變數將在程式的整個生命週期中保持其值。任何函式都可以訪問全域性變數。
示例
#include <iostream>
using namespace std;
// Global variable declaration:
int g;
int main () {
// Local variable declaration:
int a, b;
// actual initialization
a = 10;
b = 20;
g = a + b;
cout << g;
return 0;
}
這將給出以下輸出:
輸出
30
儲存期
自動變數是區域性變數,其生命週期在執行離開其作用域時結束,並在重新進入作用域時重新建立。
示例
for (int i =0 0; i < 5; ++i) {
int n = 0;
printf("%d ", ++n); // prints 1 1 1 1 1 - the previous value is lost
}
靜態變數的生命週期持續到程式結束。如果它們是區域性變數,則它們的值在執行離開其作用域時會保留。
for (int i = 0; i < 5; ++i) {
static int n = 0;
printf("%d ", ++n); // prints 1 2 3 4 5 - the value persists
}
請注意,`static`關鍵字除了靜態儲存期之外還有其他含義。此外,在 C++ 中,`auto`關鍵字不再表示自動儲存期;它現在表示自動型別,根據變數的初始化器推斷。
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP