存儲(chǔ)分類用于定義變量的范圍和使用壽命。C語(yǔ)言編程中有四個(gè)存儲(chǔ)分類。它們分別如下 -
存儲(chǔ)類 | 存儲(chǔ)地點(diǎn) | 默認(rèn)值 | 范圍 | 生命周期 |
---|---|---|---|---|
auto | RAM | 垃圾值 | 局部 | 函數(shù)中 |
extern | RAM | 零 | 全局 | 直到主程序結(jié)束,可以在程序的任何地方聲明 |
static | RAM | 零 | 局部 | 直到主程序結(jié)束,保留多個(gè)函數(shù)之間的值調(diào)用 |
register | 寄存器 | 垃圾值 | 局部 | 函數(shù)中 |
auto
關(guān)鍵字自動(dòng)應(yīng)用于所有局部變量。它是默認(rèn)存儲(chǔ)類,這就是為什么它被稱為自動(dòng)變量。
為了方便演示,首先創(chuàng)建一個(gè)工程:storage-classes,然后在此工程下創(chuàng)建一個(gè)源文件:auto-example.c,其代碼如下 -
#include <stdio.h>
void main() {
int a = 10;
auto int b = 10;//same like above
printf("%d %d", a, b);
}
執(zhí)行上面示例代碼,得到以下結(jié)果 -
10 10
寄存器(register
)變量將寄存器的內(nèi)存分配給RAM。 其大小與寄存器大小相同。它比其他變量的訪問(wèn)速度更快。
建議僅使用寄存器變量進(jìn)行快速訪問(wèn),如計(jì)數(shù)器。
注意:我們無(wú)法獲取寄存器變量的地址。
聲明示例:
register int counter = 0;
靜態(tài)變量只初始化一次,直到程序結(jié)束。它在多個(gè)函數(shù)調(diào)用之間保留其值。
靜態(tài)變量的默認(rèn)值為0
,由編譯器提供。
創(chuàng)建一個(gè)源文件: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();
}
執(zhí)行上面示例代碼,得到以下結(jié)果 -
i= 1 and j= 1
i= 2 and j= 1
i= 3 and j= 1
所有程序都可以看到(或訪問(wèn))extern
變量。如果兩個(gè)或多個(gè)文件共享相同的變量或函數(shù),則可使用extern
變量。
下面是一個(gè)聲明示例:
extern int counter = 0;