有的變數在程式執行的整個過程中都是存在的,而有的變數則是在呼叫其所在的函式時才臨時分配儲存單元,而在函式呼叫結束後,該儲存單元也就立即釋放了,變數不存在了。因此,變數應該有兩種儲存方式:靜態儲存方式和動態儲存方式。
靜態儲存方式是指在程式執行期間由系統分配固定的儲存空間的方式
動態儲存方式是指在程式執行期間根據需要進行動態的分配儲存空間的方式。
記憶體中供使用者使用的儲存空間可分為3部分:
(1)程式區
(2)靜態儲存區
(3)動態儲存區
資料分別存放在靜態儲存區和動態儲存區中。全域性變數全部存放在靜態儲存區中,在程式開始執行時給全域性變數分配儲存區,程式執行完畢就釋放。在程式執行過程中,它們佔據固定的儲存單元,而不是動態的進行分配和釋放。
在動態儲存區存放以下資料:
①函式的形參。在呼叫函式時給形參分配儲存空間
②函式中定義的沒有用關鍵字static宣告的變數,即自動變數(如函式形參和區域性變數)
③函式呼叫時現場保護和返回位址等
在函式呼叫開始時對這些資料進行儲存空間的動態分配,函式結束時釋放這些空間。在程式執行過程中,這種分配和釋放是動態的,如果在乙個程式中兩次呼叫同乙個函式,而在此函式中定義了區域性變數,則在兩次呼叫時分配給這些區域性變數的儲存空間的位址可能是不相同的。
例子:
//靜態區域性變數
#include
intfunc
(int a)
;int
main()
system
("pause");
}int
func
(int a)
執行結果:
第一次執行:
a=2, b=0+1=1, c=3+1=4
a+b+c=7
C語言學習之變數儲存
c語言中對變數的說明包括兩方面的內容 變數型別以及變數的儲存型別。變數型別如 int 整形 char 字元型 是用來說明變數所占用的記憶體空間的大小。變數儲存型別用來說明變數的作用範圍。c語言的變數儲存類有 自動類 暫存器類 靜態類和外部類。關鍵字auto加在變數名及其型別前,用來說明它是自動變數。...
C語言學習筆記 變數儲存
怎樣確定常量的型別呢?從常量的表示形式既可以判定其型別,舉例來說 只要看到由單撇號括起來的單個字元或轉義字元就是字元常量。也可以在常量的末尾加專用字元,強制指定常量的型別。從變數的作用域 即從空間 的角度來觀察,變數可以分為全域性變數和區域性變數 變數的儲存有兩種不同的方式 靜態儲存方式和動態儲存方...
C語言學習 變數的儲存類
1.作用域 a.塊作用域 變數的作用範圍在一段 內,函式的形參和內部定義的變數都具有 塊作用域 b.檔案作用域 定義在所有函式之外的變數具有檔案作用域,作用範圍在整個檔案 c.函式原型作用域 在宣告函式時給出的形參具有函式原型作用域,它的作用範圍從宣告開始到宣告結束 d.函式作用域 只針對goto語...