儲存類別:是指資料在記憶體中的儲存方式
(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()
用static宣告外部變數extern int x,y;
extern char ch;
f1()
作用:只允許本檔案中的函式引用的靜態變數稱為靜態外部變數。
注:對外部變數加或不加static說明都是靜態儲存方式,只是作用範圍不同而已。
儲存類別小結
對乙個資料的定義,需要指出兩種屬性:資料型別和儲存型別,分別用兩個關鍵字定義。
變數的儲存類別
從變數的作用域來分,變數可以分為全域性變數和區域性變數。在乙個函式內部定義的變數是區域性變數,它只是在本函式範圍內有效,在此函式外不能使用這些變數的。全域性變數可以供所有函式共用,它的有效範圍為從定義變數的位置開始到本原始檔結束。全域性變數的優點是 可以減少函式實參和形參的個數,從而減少記憶體空間以...
變數的儲存類別
普通區域性變數 自動變數 在乙個函式內定義,只在函式範圍內有效。在復合語句中定義,只在符合語句中有效。隨著函式呼叫的結束或復合語句的結束而消亡。如果沒有賦初值,則內容為隨機值。2.靜態區域性變數static 作用域 定義的函式內有效。生命週期 在定義的整個週期,靜態區域性變數始終從在著,即使退出函式...
4 12 變數的儲存類別
我們已經了解了變數的作用域。作用域是從空間的角度來分析的,分為全域性變數和區域性變數。變數還有另一種屬性 儲存期 storage duration,也稱生命期 儲存期是指變數在記憶體中的存在期間。這是從變數值存在的時間角度來分析的。儲存期可以分為靜態儲存期 static storage durati...