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 可...