變數的儲存類別詳解

2021-07-24 17:44:15 字數 1099 閱讀 7177

變數從作用域(空間)角度來分可以分為全域性變數和區域性變數

從變數值存在的時間(即生存期)角度來分,可以分為靜態儲存方式和動態儲存方式。

靜態儲存方式:程式在執行期間,由系統分配固定的儲存空間的方式。

動態儲存方式:程式在執行期間根據需要進行動態的分配儲存空間的方式

記憶體中供使用者使用的儲存空間可以分為三個部分:

程式區靜態儲存區

動態儲存區

資料分別存放在靜態儲存區和動態儲存區中,全域性變數全部存放在靜態儲存區中,在程式開始執行時給全域性變數分配儲存區,程式執行完畢就釋放,在程式執行過程中他們佔據固定的儲存單元,而不是動態的進行執行和釋放。

在動態儲存區中存放以下資料

1 函式形式引數,在呼叫函式時給形參分配儲存空間,

2 自動變數, (未加static宣告的區域性變數)。

3 函式呼叫時的現場保護和返回位址等 。

在c語言中,每乙個變數和函式有兩個屬性 : 資料型別和資料的儲存類別。

儲存類別指的是資料在記憶體中儲存的方式 ,分為兩大類,靜態儲存類和動態儲存類。

具體包括4種 

自動的(auto)

靜態的(static)

暫存器的(register)

外部的(extern)

自動的(auto)     

靜態的(static) : 

1、 靜態區域性變數屬於靜態儲存類別,在靜態儲存區內分配儲存單元,在程式整個執行期間都不釋放,而自動變數(即動態區域性變數)屬於動態儲存類別,佔動態儲存空間而不佔靜態儲存空間,函式呼叫結束時即釋放。

2 、對靜態區域性變數是在編譯時賦初值的,即只賦值一次,在程式執行時已有初值。以後每次呼叫函式時不再重新賦初值而只是保留上次函式呼叫結束時的值。而對自動變數賦值,不是在編譯時進行的,而是在函式呼叫時進行的,每呼叫一次函式重新給一次初值,相當於執行一次賦值語句。

3 、如在定義區域性變數時不賦初值的話,對靜態區域性變數來說,編譯時自動賦初值0(對數值型變數)或空字元(對字元變數)。而對自動變數來說,如果不賦初值則它的值是乙個不確定的值,這是由於每次函式呼叫結束後儲存單元已釋放,下次呼叫時又重新另分配儲存單元,而所分配的單元的值是不確定的。

4 、雖然靜態區域性變數在函式呼叫結束後仍然存在,但其他函式是不能引用它的;

變數的儲存類別詳解

變數從作用域 空間 角度來分可以分為全域性變數和區域性變數 從變數值存在的時間 即生存期 角度來分,可以分為靜態儲存方式和動態儲存方式。靜態儲存方式 程式在執行期間,由系統分配固定的儲存空間的方式。動態儲存方式 程式在執行期間根據需要進行動態的分配儲存空間的方式 記憶體中供使用者使用的儲存空間可以分...

變數的儲存類別詳解一

變數從作用域 空間 角度來分可以分為全域性變數和區域性變數 從變數值存在的時間 即生存期 角度來分,可以分為靜態儲存方式和動態儲存方式。靜態儲存方式 程式在執行期間,由系統分配固定的儲存空間的方式。動態儲存方式 程式在執行期間根據需要進行動態的分配儲存空間的方式 記憶體中供使用者使用的儲存空間可以分...

變數的儲存類別

從變數的作用域來分,變數可以分為全域性變數和區域性變數。在乙個函式內部定義的變數是區域性變數,它只是在本函式範圍內有效,在此函式外不能使用這些變數的。全域性變數可以供所有函式共用,它的有效範圍為從定義變數的位置開始到本原始檔結束。全域性變數的優點是 可以減少函式實參和形參的個數,從而減少記憶體空間以...