在c語言中,每個變數和函式有兩個屬性:資料型別和資料的儲存類別。
1、變數的宣告和定義的格式:儲存型別 型別修飾符 資料型別 變數名
2、函式的宣告格式:儲存型別 返回資料型別 函式名(引數列表)
從變數的作用域(即從空間)角度來分,可以分為全域性變數和區域性變數。
從變數值存在的作時間(即生存期)角度來分,可以分為靜態儲存方式和動態儲存方式。
靜態儲存方式:是指在程式執行期間分配固定的儲存空間的方式。
動態儲存方式:是在程式執行期間根據需要進行動態的分配儲存空間的方式。
使用者儲存空間可以分為三個部分:
1) 程式區;
2) 靜態儲存區;
3) 動態儲存區;
全域性變數全部存放在靜態儲存區,在程式開始執行時給全域性變數分配儲存區,程式行完畢就釋放。在程式執行過程中它們佔據固定的儲存單元,而不動態地進行分配和釋放;
動態儲存區存放以下資料:
1) 函式形式引數;
2) 自動變數(未加static宣告的區域性變數);
3) 函式呼叫實的現場保護和返回位址;
對以上這些資料,在函式開始呼叫時分配動態儲存空間,函式結束時釋放這些空間。
一、auto自動變數(動態區域性變數)
函式中的區域性變數,如不專門宣告為static儲存類別,都是動態地分配儲存空間的,資料儲存在動態儲存區中。
函式中的形參和在函式中定義的變數(包括在復合語句中定義的變數),都屬此類,在呼叫該函式時系統會給它們分配儲存空間,在函式呼叫結束時就自動釋放這些儲存空間。
這類區域性變數稱為自動變數。自動變數用關鍵字auto作儲存類別的宣告。
二、static靜態區域性變數
有時希望函式中的區域性變數的值在函式呼叫結束後不消失而保留原值,這時就應該指定區域性變數為「靜態區域性變數」,用關鍵字static進行宣告。
1、靜態區域性變數屬於靜態儲存類別,在靜態儲存區內分配儲存單元。在程式整個執行期間都不釋放。而自動變數(即動態區域性變數)屬於動態儲存類別,佔動態儲存空間,函式呼叫結束後即釋放。
2、雖然靜態區域性變數在函式呼叫結束後任然存在,但其他函式是不能引用它的。
三、register暫存器變數
為了提高效率,c 語言允許將區域性變數得值放在 cpu 中的暫存器中,這種變數叫「暫存器變數」,用關鍵字 register 作宣告。
說明:1) 只有區域性自動變數和形式引數可以作為暫存器變數;
2) 乙個計算機系統中的暫存器數目有限,不能定義任意多個暫存器變數;
3) 區域性靜態變數不能定義為暫存器變數。
四、extern全域性變數、static靜態全域性變數
全域性變數是在函式的外部定義的,它的作用域為從變數定義處開始,到本程式檔案的末尾。也稱作外部變數。
1、使用extern對該變數做全域性變數宣告,適用於程式中的所有檔案
2、使用static宣告,使得該變數只適用於本檔案,稱作靜態全域性(外部)變數
五大變數:
auto自動變數(動態區域性變數)
static靜態區域性變數:
在函式內部宣告;變數保留,但不能呼叫,倘若再次呼叫定義它的函式時,它又可繼續使用,而且儲存了前次被呼叫結束的值。
register暫存器變數
extern全域性變數 乙個專案中的所有檔案呼叫
static靜態全域性變數:
在函式外部宣告;只能被本文本呼叫
變數的儲存方式和儲存類別
1 動態儲存方式與靜態儲存方式 儲存期可以分為靜態儲存期 static storage duration 和動態儲存期 dynamic storage duration 這是由變數的靜態儲存方式和動態儲存方式決定的。所謂靜態儲存方式是指在程式執行期間,系統對變數分配固定的儲存空間。而動態儲存方式則是...
變數的儲存類別
從變數的作用域來分,變數可以分為全域性變數和區域性變數。在乙個函式內部定義的變數是區域性變數,它只是在本函式範圍內有效,在此函式外不能使用這些變數的。全域性變數可以供所有函式共用,它的有效範圍為從定義變數的位置開始到本原始檔結束。全域性變數的優點是 可以減少函式實參和形參的個數,從而減少記憶體空間以...
變數的儲存類別
儲存類別 是指資料在記憶體中的儲存方式 1 供使用者使用的儲存空間 程式區靜態儲存區 編譯時候分配空間,程式結束釋放空間。存放全域性變數 動態儲存區 定義時動態分配空間,對應函式完成時就釋放空間,再呼叫時又重新動態分配空間。存放auto型別區域性變數 2 儲存型別 auto,static,regis...