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;