歡迎關注筆者,你的支援是持續更博的最大動力
區域性變數:定義在函數內部的變數(函數的形參也是區域性變數),只能在定義它的函數內部使用
全域性變數:定義在函數外面的變數,所有函數都可以使用
靜態變數:有全域性變數、前面加了「static」關鍵字的區域性變數
區別:
如果沒明確初始化,則靜態變數會被自動初始化成全0(每個bit都是0),區域性非靜態變數的值則隨機
下面 下麪是兩段程式碼,除了第2段多了「static」關鍵字,其他內容一模一樣,但輸出結果卻不同。
非靜態變數
void Func(){
int n = 4; //初始化語句 將非靜態區域性變數n初始化爲4,且每次執行Func函數都會執行這一行
cout << n << endl; //輸出4
++n;
}
int main(){
Func(); Func(); Func(); //在主函數中呼叫Func函數三次
}
這段程式碼將輸出:
4
4
4
因爲每次呼叫Fun函數,都執行了初始化語句,使得 n = 4, 不論 ++n執行多少次,下次呼叫函數時,還是會先初始化n。
呼叫次數 | 過程 | 輸出 | 呼叫結束時n的值 |
---|---|---|---|
第1次 | 初始化 n = 4,輸出n,++n | 4 | 5 |
第2次 | 初始化 n = 4,輸出n,++n | 4 | 5 |
第3次 | 初始化 n = 4,輸出n,++n | 4 | 5 |
靜態變數
void Func(){
static int n = 4; //初始化語句,有static關鍵字 將靜態區域性變數n初始化爲4,只在函數第一次被執行的時候執行,靜態變數地址固定
cout << n << endl; //輸出當前n的值,不一定是4
++n;
}
int main(){
Func(); Func(); Func(); //在主函數中呼叫Func函數三次
}
這段程式碼將輸出:
4
5
6
因爲只有第1次呼叫Func函數時,才執行初始化語句,使得 n = 4,下次執行的時候,不會再執行初始化語句了。所以,第2次、第3次呼叫Fun函數時,n沒有初始化,n的值是上一次呼叫函數後n的值。
呼叫次數 | 過程 | 輸出 | 呼叫結束時n的值 |
---|---|---|---|
第1次 | 初始化 n = 4,輸出n,++n | 4 | 5 |
第2次 | n = 5,輸出n,++n | 5 | 6 |
第3次 | n = 6,輸出n,++n | 6 | 7 |
從上面兩段程式碼,可看出靜態變數和非靜態變數的區別。
日常vlog: 點這裏去B站~