從變數的作用域來分,變數可以分為全域性變數和區域性變數。
在乙個函式內部定義的變數是區域性變數,它只是在本函式範圍內有效,在此函式外不能使用這些變數的。
全域性變數可以供所有函式共用,它的有效範圍為從定義變數的位置開始到本原始檔結束。
全域性變數的優點是:可以減少函式實參和形參的個數,從而減少記憶體空間以及傳遞資料時的時間消耗。
全域性變數的缺點是:1.全域性變數在程式的全部執行過程中都占用儲存單元,而不僅僅在需要時才分配使用。
2.使用全域性變數過多,會降低程式的清晰性。
從變數值存在的時間(生存期)角度來分,變數可以分為靜態儲存方式和動態儲存方式。
所謂靜態儲存方式就是指在程式執行期間分配固定的儲存空間,而動態儲存方式則是在程式執行期間根據需要進行動態的分配儲存空間。
全域性變數全部存放在靜態儲存區中,在程式開始執行時給全域性變數分配儲存區,程式執行完畢後釋放。
資料的儲存方式分為兩大類:靜態儲存和動態儲存。具體包含四種:自動(auto),靜態(static),暫存器(register),外部(extern)
1.auto變數
函式中的區域性變數,如不專門宣告為static儲存類別,都是動態分配儲存空間的,資料儲存在動態儲存區,關鍵字auto可以省略,auto不寫則隱含確定為自動儲存類別,它屬於動態儲存方式。
2.static宣告區域性變數
靜態區域性變數在函式呼叫結束後不消失保留原值,也就是其占用的儲存單元不釋放。
靜態區域性變數在編譯時賦初值的,只賦初值一次。
如果定義區域性變數時不賦初值的話,則對靜態區域性變數來說,編譯時自動賦初值0(數值型變數)或者空字元(對字元型變數)。
3.register變數
為了提高程式的執行效率,將區域性變數的值放在cpu的暫存器中,需要時直接從暫存器中取出來參加運算。對暫存器的訪問速度遠遠高於對記憶體的訪問速度。
注意:(1)只有區域性變數和形式引數可以作為暫存器變數,全域性變數不行。
(2)乙個計算機系統中的暫存器數目是有限的,不能定義任意多個暫存器變數。
(3)區域性靜態變數不能定義為暫存器變數。
4.extern宣告外部變數
根據函式能否被其他原始檔呼叫,將函式分為內部函式和外部函式。
如果乙個函式只能被本檔案中其他函式呼叫,它為內部函式。在定義內部函式時加static,內部函式又稱為靜態函式。
如果在函式前面加上extern,則表示該函式是外部函式,可以供其他檔案呼叫。c語言規定,如果定義函式時省略extern,則隱含為外部函式。
變數的儲存類別
儲存類別 是指資料在記憶體中的儲存方式 1 供使用者使用的儲存空間 程式區靜態儲存區 編譯時候分配空間,程式結束釋放空間。存放全域性變數 動態儲存區 定義時動態分配空間,對應函式完成時就釋放空間,再呼叫時又重新動態分配空間。存放auto型別區域性變數 2 儲存型別 auto,static,regis...
變數的儲存類別
普通區域性變數 自動變數 在乙個函式內定義,只在函式範圍內有效。在復合語句中定義,只在符合語句中有效。隨著函式呼叫的結束或復合語句的結束而消亡。如果沒有賦初值,則內容為隨機值。2.靜態區域性變數static 作用域 定義的函式內有效。生命週期 在定義的整個週期,靜態區域性變數始終從在著,即使退出函式...
4 12 變數的儲存類別
我們已經了解了變數的作用域。作用域是從空間的角度來分析的,分為全域性變數和區域性變數。變數還有另一種屬性 儲存期 storage duration,也稱生命期 儲存期是指變數在記憶體中的存在期間。這是從變數值存在的時間角度來分析的。儲存期可以分為靜態儲存期 static storage durati...