什麼是靜態變數 舉例 C語言入門

2020-08-11 22:33:29

歡迎關注筆者,你的支援是持續更博的最大動力

相關描述

區域性變數:定義在函數內部的變數(函數的形參也是區域性變數),只能在定義它的函數內部使用
全域性變數:定義在函數外面的變數,所有函數都可以使用
靜態變數:有全域性變數、前面加了「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站~