鍍金池/ 教程/ C/ C語(yǔ)言存儲(chǔ)分類
C語(yǔ)言printf()和scanf()函數(shù)
C語(yǔ)言strlen()函數(shù)
C語(yǔ)言指針
C語(yǔ)言ftell()函數(shù)
C語(yǔ)言#ifdef指令
C語(yǔ)言程序執(zhí)行流程
C語(yǔ)言歷史
C語(yǔ)言fprintf()和fscanf()函數(shù)
C語(yǔ)言#define指令
C語(yǔ)言#if指令
C語(yǔ)言將數(shù)組傳遞給函數(shù)
C語(yǔ)言指針的指針
C語(yǔ)言rewind()函數(shù)
C語(yǔ)言常量
C語(yǔ)言strcat()函數(shù)
C語(yǔ)言#ifndef指令
C語(yǔ)言continue語(yǔ)句
C語(yǔ)言注釋
C語(yǔ)言#include指令
C語(yǔ)言類型轉(zhuǎn)換
C語(yǔ)言strcpy()函數(shù)
C語(yǔ)言strlwr()函數(shù)
C語(yǔ)言while循環(huán)
C語(yǔ)言字符串
C語(yǔ)言strrev()函數(shù)
C語(yǔ)言gets()和puts()函數(shù)
C語(yǔ)言文件處理
C語(yǔ)言存儲(chǔ)分類
C語(yǔ)言運(yùn)算符
C語(yǔ)言數(shù)據(jù)類型
C語(yǔ)言strcmp()函數(shù)
C語(yǔ)言VS開(kāi)發(fā)環(huán)境安裝
C語(yǔ)言轉(zhuǎn)義序列
C語(yǔ)言第一個(gè)程序
C語(yǔ)言變量
C語(yǔ)言goto語(yǔ)句
C語(yǔ)言預(yù)處理器指令
C語(yǔ)言指針?biāo)阈g(shù)運(yùn)算
C語(yǔ)言數(shù)學(xué)函數(shù)
C語(yǔ)言二維數(shù)組
C語(yǔ)言for循環(huán)
C語(yǔ)言命令行參數(shù)
C語(yǔ)言通過(guò)值和引用函數(shù)
C語(yǔ)言fputs()和fgets()函數(shù)
C語(yǔ)言do-while循環(huán)
C語(yǔ)言結(jié)構(gòu)體數(shù)組
C語(yǔ)言循環(huán)
C語(yǔ)言#pragma指令
C語(yǔ)言關(guān)鍵字
C語(yǔ)言#error指令
C語(yǔ)言聯(lián)合體
C語(yǔ)言特點(diǎn)
C語(yǔ)言break語(yǔ)句
C語(yǔ)言遞歸
C語(yǔ)言函數(shù)
C語(yǔ)言結(jié)構(gòu)體
C語(yǔ)言switch語(yǔ)句
C語(yǔ)言結(jié)構(gòu)體嵌套
C語(yǔ)言fputc()和fgetc()函數(shù)
C語(yǔ)言fseek()函數(shù)
C語(yǔ)言字符串函數(shù)
C語(yǔ)言if-else語(yǔ)句
C語(yǔ)言教程
C語(yǔ)言宏
C語(yǔ)言數(shù)組
C語(yǔ)言strupr()函數(shù)
C語(yǔ)言#undef指令

C語(yǔ)言存儲(chǔ)分類

存儲(chǔ)分類用于定義變量的范圍和使用壽命。C語(yǔ)言編程中有四個(gè)存儲(chǔ)分類。它們分別如下 -

  • auto
  • extern
  • static
  • register
存儲(chǔ)類 存儲(chǔ)地點(diǎn) 默認(rèn)值 范圍 生命周期
auto RAM 垃圾值 局部 函數(shù)中
extern RAM 全局 直到主程序結(jié)束,可以在程序的任何地方聲明
static RAM 局部 直到主程序結(jié)束,保留多個(gè)函數(shù)之間的值調(diào)用
register 寄存器 垃圾值 局部 函數(shù)中

1. auto變量

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

2.register變量

寄存器(register)變量將寄存器的內(nèi)存分配給RAM。 其大小與寄存器大小相同。它比其他變量的訪問(wèn)速度更快。

建議僅使用寄存器變量進(jìn)行快速訪問(wèn),如計(jì)數(shù)器。

注意:我們無(wú)法獲取寄存器變量的地址。

聲明示例:

register int counter = 0;

3.static變量

靜態(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

4.extern變量

所有程序都可以看到(或訪問(wèn))extern變量。如果兩個(gè)或多個(gè)文件共享相同的變量或函數(shù),則可使用extern變量。

下面是一個(gè)聲明示例:

extern int counter = 0;