C 語言變數的儲存類別

2021-09-13 12:17:28 字數 1323 閱讀 4732

c 語言的變數都有兩個屬性:資料型別和儲存類別

儲存類別:auto、static、register、extern ,變數的儲存類別決定了變數在記憶體中的儲存區域。

一、介紹記憶體儲存區

在c語言中,記憶體儲存區分為:棧、堆、靜態儲存區、常量儲存區

1)棧

由編譯器管理的動態儲存區域,用於儲存臨時變數,不需要時會自動**。

函式形參、區域性變數、其他臨時變數(如a++產生的臨時變數)

2)堆

由程式管理的動態儲存區域,用於分配由程式使用malloc申請的記憶體空間,需要自行釋放。

3)靜態儲存區

儲存全域性變數,該區域分配的內存在整個程式執行過程中都是有效的,程式結束後自動釋放,記憶體分配時會自動初始化。

4)常量儲存區

儲存程式中的常量

二、auto 變數

// 作用是宣告變數的生存期為自動型,auto變數是臨時變數

int fun()

int fun()

// 注意:不能在函式外部宣告auto變數

三、static 變數

auto 變數在每次函式結束後都會被釋放,而static 可以儲存變數在記憶體中直到程式結束才被釋放

#includevoid test() 

int main()

// 輸出234

四、register 變數

所有變數的值都是儲存在記憶體中,計算機直接操作的物件是暫存器(cpu的元件)。暫存器讀寫速度非常快,當程式需要訪問變數時,先從記憶體把變數值提取到暫存器中,運算結束後,若值發生改變,再把暫存器中的值送回記憶體存放。

register 可以將變數的值要求直接儲存在暫存器中,無需從記憶體獲取它的值,儲存時也無需存回記憶體,直接在暫存器上操作。

如果乙個變數頻繁使用,可將其宣告為 register 變數,大大提高程式效率。

#includeint main()
五、extern 變數

用於擴充套件全域性變數的作用域,使其能在其他檔案中被使用,如:

// 檔案 file1.c

int a = 1;

// 檔案2 file2.c 需要使用 file1.c 的 a 變數

extern int a;

void main()

C語言變數儲存類別

變數除了型別屬性 int char float.外,另外乙個重要屬性就是儲存類別 系統把程式中用到的資料區分為靜態儲存區和動態儲存區。靜態儲存區 在這個區分配了空間的變數,在程式執行過程中一直存在,即相對是不變的。動態儲存區 在這個區分配了空間的變數,可能隨時被釋放,即相對是不斷變化的。c語言提供了...

C語言變數的儲存類別

前面已經介紹了,從變數的作用域 即從空間 角度來分,可以分為全域性變數和區域性變數。從另乙個角度,從變數值存在的作時間 即生存期 角度來分,可以分為 靜態儲存方式 和動態儲存方式。使用者儲存空間可以分為三個部分 程式區 靜態儲存區 動態儲存區。全域性變數全部存放在靜態儲存區,在程式開始執行時給全域性...

c語言 變數的儲存類別

1.動態儲存方式與靜態儲存方式 執行結果 1 函式中的區域性變數 形參 在函式中定義的變數等 如果不專門宣告為static儲存類別,都是動態分配儲存空間的,在函式呼叫時系統給這些變數分配空間,在呼叫結束時系統就自動釋放這些記憶體空間,因此這類區域性變數被稱為自動變數。2 實際上,關鍵字 auto 可...