變數的儲存類別

2021-08-29 03:18:03 字數 1924 閱讀 9330

儲存類別:是指資料在記憶體中的儲存方式

(1)供使用者使用的儲存空間:

程式區靜態儲存區:編譯時候分配空間,程式結束釋放空間。(存放全域性變數)

動態儲存區:定義時動態分配空間,對應函式完成時就釋放空間,再呼叫時又重新動態分配空間。(存放auto型別區域性變數)

(2)儲存型別:auto,static,register,extern

(3)變數的完整定義:儲存型別,資料型別,變數名

自動變數(auto):

(1)格式:

[auto]資料型別 變數名[=初始化表示式]

注:自動變數是動態分配儲存空間,區域性變數預設為auto型別

(2)說明:

未進行初始化時,自動變數的值是不定的;

引用自動變數,必須對其初始化或對其賦值;

對同一函式的兩次呼叫之間,自動變數的值是不保留的;

自動變數的初始化是在函式呼叫時進行的;

函式的形參也是一種自動變數。

(3)例:(說明動態分配儲存空間情況)

main()

void count(int n)

//執行結果:

1:x=1,x+2=3

2:x=2,x+2=4

3:x=3,x+2=5

靜態區域性變數:

(1)格式:static 資料型別 變數名[=初始化表示式]

注:自動變數是靜態分配儲存空間

(2)說明:

靜態變數的儲存空間在程式的整個執行期間是固定的,而不像動態變數是在程式執行中被建立,動態撤銷的;

靜態變數的初始化是在編譯時進行的;

靜態區域性變數的值具有可繼承性;

靜態區域性變數的值只能在本函式中使用;

c規定,只能在定義全域性變數和區域性靜態變數時才能對陣列初始化為0。

注:什麼情況下使用區域性靜態變數呢?

答:需要保留函式上一次呼叫結束時的值;如果初始化後,變數只被引用而不改變其值則可用;函式中的陣列要初始化時。

(3)例:(分別使用自動變數和靜態變數比較程式)

main()

void count(int n)

//執行結果:

1:x=1,y=1,x+2=3,y+2=3

2:x=2,y=3,x+2=4,y+2=5

3:x=3,y=5,x+2=5,y+5=7

暫存器變數:

格式:register 資料型別 變數名[=初始化表示式]

說明:只有區域性自動變數和形參可以作為暫存器變數,其他變數不行;

乙個計算機系統中的暫存器數目是有限的,不能定義任意多個暫存器變數;

不同的計算機系統對register變數的處理是不同的;

區域性變數不能定義為暫存器變數。

用extent宣告的外部變數:

(1)在乙個檔案內宣告外部變數

作用:擴充套件外部變數的作用範圍

(2)在多檔案程式中宣告外部變數(用工程檔案連線時)

作用:允許其他檔案中的函式引用(這時需在引用它的檔案中用extern說明)

//file 1.c

int x,y;

char ch;

main()

extern int x,y;

extern char ch;

f1()

用static宣告外部變數

作用:只允許本檔案中的函式引用的靜態變數稱為靜態外部變數。

注:對外部變數加或不加static說明都是靜態儲存方式,只是作用範圍不同而已。

儲存類別小結

對乙個資料的定義,需要指出兩種屬性:資料型別和儲存型別,分別用兩個關鍵字定義。

變數的儲存類別

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

變數的儲存類別

普通區域性變數 自動變數 在乙個函式內定義,只在函式範圍內有效。在復合語句中定義,只在符合語句中有效。隨著函式呼叫的結束或復合語句的結束而消亡。如果沒有賦初值,則內容為隨機值。2.靜態區域性變數static 作用域 定義的函式內有效。生命週期 在定義的整個週期,靜態區域性變數始終從在著,即使退出函式...

4 12 變數的儲存類別

我們已經了解了變數的作用域。作用域是從空間的角度來分析的,分為全域性變數和區域性變數。變數還有另一種屬性 儲存期 storage duration,也稱生命期 儲存期是指變數在記憶體中的存在期間。這是從變數值存在的時間角度來分析的。儲存期可以分為靜態儲存期 static storage durati...