變數的儲存型別:
從變數值存在的時間(即生存期)看,變數的儲存型別分為靜態儲存和動態儲存兩種不同的方式。
靜態儲存方式:
在程式執行期間由系統分配固定的儲存空間,其值存在的時間是從程式開始執行到程式結束。
動態儲存方式:
在程式執行期間根據需要進行動態的分配儲存空間,其值存在的時間是從包含該變數定義的函式開始執行至函式執行結束。
變數在記憶體中的存放位置和型別
c語言中可使用的儲存空間分為三個,分別是:程式區、靜態儲存區、動態儲存區。
程式區存放可執行程式的機器指令。
靜態儲存區存放全域性變數和區域性靜態變數。
動態儲存區存放區域性變數、形參、和函式呼叫現場。
儲存型別可以分為四種,分別是:auto 自動變數(動態儲存區)、register 暫存器變數(cpu中的暫存器)、extern 外部變數(靜態儲存區)、static 靜態變數(靜態儲存區)。
區域性變數的儲存方式(自動變數、靜態區域性變數、暫存器變數):
1.自動變數(auto):函式中的區域性變數,不做任何儲存類別的說明都為自動變數。
說明:自動變數必須在乙個函式體的內部,分配在動態儲存區。
自動變數不賦初值,其值不確定。每呼叫一次,重新賦值一次。函式的形參也是自動變數。
「自動」體現在進入語句塊時自動申請記憶體,退出時自動釋放記憶體,對其進行的分配和釋放儲存空間的工作,由編譯系統自動處理。
2.靜態區域性變數(static):函式中區域性變數的值在函式呼叫結束後不消失(以後一直存在並總是保持它的最新值,即具有記憶性),即不釋放儲存單元。此時可指定該變數為「靜態區域性變數」。定義形式:static 型別說明符 變數名;
特性:靜態區域性變數系統自動初始化為0,存放在靜態儲存區;生存期為整個程式執行期間;
靜態區域性變數和全域性變數都是靜態儲存型別,但作用域不同;
靜態區域性變數在編譯時賦初值,每次呼叫時不再賦初值,只保留呼叫結束時變數的值。其值在整個程式執行期間都不釋放。即上一次呼叫的結果會被儲存下來。
3.暫存器變數(register):對頻繁使用的變數,為減少訪問變數花費的時間,c語言允許將區域性變數的值存放在cpu運算器的暫存器中,稱為「暫存器變數」,用關鍵字「register」說明。定義形式:register 型別說明符 變數名;
說明:暫存器變數的型別一般只限於整型、字元型或指向整型、字元型的指標,且只用於區域性變數和形參。
全域性變數、區域性靜態變數不可以作為暫存器變數。
不能定義任意多個暫存器變數,乙個計算機系統中暫存器的數目是有限的。不能取暫存器變數的位址。
全域性變數的儲存方法(外部型別、靜態型別)
1.外部全域性變數:乙個檔案中要引用其他檔案中定義的變數,應該在需要引用此變數的檔案中用extern進行說明。
2.靜態全域性變數:乙個檔案中的全域性變數僅限於定義它的檔案引用,而不能被其他檔案訪問,需要用static進行說明。
說明:
變數的儲存型別
曾巨集安,華清遠見嵌入式學院 講師。我們在程式中會經常定義一些變數來儲存和處理資料。從本質上看,變數代表了一段可操作的記憶體,也可以認為變數是記憶體的符號化表示。當程式中需要使用記憶體時,可以定義某種型別的變數。此時編譯器根據變數的資料型別分配一定大小的記憶體空間。程式就可以通過變數名來訪問對應的記...
變數的儲存型別
儲存型別是從變數的存在時間 即生存期 來劃分變數。變數的儲存型別可分為靜態儲存方式和動態儲存方式。對於動態儲存變數,當程式執行到該變數處時才為其分配儲存空間,當程式執行到該變數所在作用域的結束處時自動收回為其分配的儲存空間,因此它的生存期為所在作用域。在程式開始就執行就為其分配儲存空間,直到程式結束...
變數的儲存型別
變數的儲存型別有兩種 動態和靜態,其中又有四種基本型別 auto,static,register,extern auto便是經常在函式中碰到的那些區域性變數,關鍵字auto可省略,定義register變數就是為了提高對資料的訪問速度,只有區域性自動變數或形參可以這麼定義,下面就static和exte...