C語言儲存分類


儲存分類用於定義變數的範圍和使用壽命。C語言程式設計中有四個儲存分類。它們分別如下 -

  • auto
  • extern
  • static
  • register
儲存類 儲存地點 預設值 範圍 生命週期
auto RAM 垃圾值 區域性 函式中
extern RAM 全域性 直到主程式結束,可以在程式的任何地方宣告
static RAM 區域性 直到主程式結束,保留多個函式之間的值呼叫
register 暫存器 垃圾值 區域性 函式中

1. auto變數

auto關鍵字自動應用於所有區域性變數。它是預設儲存類,這就是為什麼它被稱為自動變數。

為了方便演示,首先建立一個工程:storage-classes,然後在此工程下建立一個原始檔:auto-example.c,其程式碼如下 -

#include <stdio.h>  
void main() {
    int a = 10;
    auto int b = 10;//same like above  
    printf("%d %d", a, b);
}

執行上面範例程式碼,得到以下結果 -

10 10

2.register變數

暫存器(register)變數將暫存器的記憶體分配給RAM。 其大小與暫存器大小相同。它比其他變數的存取速度更快。

建議僅使用暫存器變數進行快速存取,如計數器。

注意:我們無法獲取暫存器變數的地址。

宣告範例:

register int counter = 0;

3.static變數

靜態變數只初始化一次,直到程式結束。它在多個函式呼叫之間保留其值。
靜態變數的預設值為0,由編譯器提供。

建立一個原始檔:static-example.c,其程式碼如下 -

#include <stdio.h>  
void func() {
    static int i = 0;//static variable  
    int j = 0;//local variable  
    i++;
    j++;
    printf("i= %d and j= %d\n", i, j);
}

void main() {
    func();
    func();
    func();
}

執行上面範例程式碼,得到以下結果 -

i= 1 and j= 1
i= 2 and j= 1
i= 3 and j= 1

4.extern變數

所有程式都可以看到(或存取)extern變數。如果兩個或多個檔案共用相同的變數或函式,則可使用extern變數。

下面是一個宣告範例:

extern int counter = 0;