1. 程式人生 > >詳解 static 修飾變數和函式的作用

詳解 static 修飾變數和函式的作用

我們知道,static 關鍵字的作用是宣告靜態變數,但是變數有全域性的,還有區域性的,難道作用都是一樣的嗎?
答案當然是不一樣,究竟有何不同,我們一起來探究一下。

static修飾區域性變數

區域性變數是出現在區域性範圍(程式碼塊內部)的變數,它的生命週期只能在定義程式碼的程式碼塊內部有意義,出程式碼塊就會被銷燬。我們來看個例子。

void test()
{
    int a = 1;//無static修飾的區域性變數
    a++;
    printf("%d\n", a);
}
int main()
{
    int i = 0;
    for (i = 0; i < 10
; i++) test(); system("pause"); return 0; }

列印結果為:
這裡寫圖片描述
即:區域性變數無static修飾時,出了作用域就會被自動銷燬,所以每次進函式時a的值都會變為1。
接下來再看一下有static修飾的場景列印的結果:
這裡寫圖片描述
我們可以得出一個結論:static 修飾區域性變數時,使該變數的生命週期變長了,就算出函式也不會被銷燬。

static修飾全域性變數和函式

全域性變數和函式的一個共同點就是都具有外部連結屬性,即不僅可以在當前原始檔中使用,在其他原始檔中使用 extern 聲明後也可以使用
如果用static修飾後,它們的外部連結屬性就會變為內部連結屬性,即只能在當前原始檔中使用。