區域性變數:定義在函式體內部的變數,作用域僅限於函式體內部。離開函式體就會無效。再呼叫就是出錯。
關於區域性變數的作用域還要說明以下幾點:
(1)主函式也是乙個函式,它與其他函式是平行關係。主函式中定義的變數也只能在主函式中使用,不能在其他函式中使用。同時,主函式中也不能使用其他函式中定義的變數。
(2)形參變數是屬於被調函式的區域性變數,實參變數是屬於主調函式的區域性變數。
(3)在不同函式中可以使用相同的變數名,它們代表不同的物件,編譯器分配不同的單元,互不干擾。
(4)在復合語句中定義的變數其作用域只能在復合語句範圍內。
全域性變數:定義在所有的函式外部定義的變數,它的作用域是整個程式,也就是所有的原始檔,包括.c和.**件。
根據變數的存在時間(生存週期)可以分成:靜態儲存和動態儲存。
靜態儲存變數:在程式執行期間分配固定儲存空間的變數 這種分配變數的方式叫做靜態儲存方式
動態儲存變數:在程式執行期間根據需要進行動態分配儲存空間的變數 這種分配方式叫做動態分配方式 ,動態儲存變數的例子比如:函式的形參、自動變數(沒有加static的區域性變數)、函式呼叫的現場現場保護和返回值。
auto 變數:
函式中的區域性變數,如果不專門的宣告為 static儲存,都是動態分配儲存空間。資料儲存在動態儲存區內。函式中的形參和函式中的變數都屬於此類,呼叫該函式時候系統自動的分配空間,在函式結束的時候,釋放該空間。這些區域性變數被稱為自動變數。自動變數用 auto關鍵字宣告(可以省略auto )。所以下圖左邊的 increment(); 的執行結果都是1。
static 變數:
如果我們希望呼叫的函式在釋放的時候不消失能保留原值,這就需要定義為靜態區域性變數。用關鍵字 static宣告。如下圖右邊的執行結果
對靜態區域性變數的說明:
1)靜態區域性變數屬於靜態儲存類別,在靜態儲存區內分配儲存單元。在程式整個執行期間都不釋放。而自動變數(即動態區域性變數)屬於動態儲存類別,佔動態儲存空間,函式呼叫結束後即釋放。
2)靜態區域性變數在編譯時賦初值,即只賦初值一次;而對自動變數賦初值是在函式呼叫時進行,每呼叫一次函式重新給一次初值,相當於執行一次賦值語句。
3)如果在定義區域性變數時不賦初值的話,則對靜態區域性變數來說,編譯時自動賦初值0(對數值型變數)或空字元(對字元變數)。而對自動變數來說,如果不賦初值則它的值是乙個不確定的值。
register變數(了解即可,不建議使用)
部分內容摘自:
及廣工大計算機網課
C語言之區域性變數 全域性變數 變數儲存方式
備註 1 文章中的例子暫時為空,日後希望自己能自己編寫例子賦貼上來。一 角度分析 變數作用域 區域性變數和全域性變數 變數存在的生存期 靜態儲存方式和動態儲存方式 二 區域性變數 區域性變數也稱為內部變數。區域性變數是在函式內作定義說明的。其作用域僅限於函式內,離開函式後再使用這種變數是非法的。例子...
c語言臆想 全域性 區域性變數
data段在編譯時就已確定大小,在程式一執行就分配空間 棧中的資料在執行時才分配空間。首先型別 靜態變數 都不再棧中管理,編譯時在靜態儲存區分配空間。非靜態變數 除全域性變數外,都在棧中管理,執行時分配記憶體。作用域 全域性變數 都不再棧中管理,編譯時在靜態儲存區分配空間。在程式執行結束前都有效。區...
c語言全域性變數 區域性變數和儲存類別
第十二次課 全域性變數 區域性變數和儲存類別 一 作用域 1.檔案作用域 2.函式作用域 3.語句塊 demo1 int main void i 10 錯誤,i超出了它的作用域範圍 return 0 demo2 int main void i 10 錯誤,i超出了它的作用域範圍,return 0 注...