存儲分類用於定義變數的範圍和使用壽命。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;