c語言的儲存類分為四種,它們是
auto
自動的,
extern
外部的,
static
靜態的,
register
暫存器的。
分程式是由一對花括號擴起來的一段程式,乙個函式就是乙個分程式,乙個復合語句也是乙個分程式。
c語言中分程式結構允許並列或巢狀。函式可以看成是最外一層並列的分程式,只是它被命名,並可以帶引數和具有返回值。
1)自動變數
c語言規定,在函式(或分程式)內定義的名字只要不加儲存類說明,都表示自動的。自動變數的儲存空間是這樣分配的:當進入乙個函式(或分程式)時,系統自動地為該函式(或分程式)定義地自動變數分配儲存空間。這樣,這個函式(或分程式)中,這些變數是可訪問地,當函式(或分程式)執行完畢後,自動變數所占地儲存空間被系統自動**,或者說被自動釋放,因而這些變數就不再存在,下次呼叫該函式時,系統再為這些變數分配儲存空間。正是因為這種變數函式(或分程式)的執行而產生,隨函式(或分程式)的執行完畢而消失才把它們叫做自動變數。
2)外部變數
任何函式外部定義的變數都是外部的。外部變數的作用域可以是真個程式,一般來講,如果沒有特殊說明,它的作用域是從定義處到本檔案結束。在函式外說明了某些變數後,後面所有函式都可以對它們進行訪問,外部變數的值在整個程式執行期間一直儲存。
3)靜態變數
靜態變數分為內部(自動)靜態變數和外部靜態變數,在函式中定義的是內部靜態變數,在函式外定義的是外部靜態變數,內部靜態變數的作用域是它所處的函式(或分程式),外部的靜態變數的作用域是它所在的檔案。
乙個內部靜態變數的儲存形式是這樣的:當第一次呼叫該變數所在的函式時,系統為它分配儲存單元,當控制從函式退出時,並不釋放靜態變數所佔的儲存單元,其值也仍然保留,下次再呼叫時,靜態變數仍擁有上次呼叫時留下的值。
外部靜態變數的作用域從定義處起知道所在檔案的尾部,對其他檔案及本檔案定義之前的部分都是不可見的,即使加上
extern
。也就是說它有很不錯的隱蔽性。使用外部靜態變數可以起到幾個函式共享資料,而對其他函式保密的作用。
4)暫存器變數
計算機中只有暫存器中的資料才能夠直接參加運算,而一般變數時放在記憶體中,變數參加運算時,需要先把變數的值從記憶體中取到暫存器中,然後計算,再把計算結果回放到記憶體中取。關鍵字
register
,為了減少記憶體訪問,提高運算速度,
c語言規定允許定義所謂暫存器變數,即希望暫存器來做變數的儲存單元。暫存器變數只能在函式中定義,並只能是
int
或char
型別,一般只是使用最頻繁的變數才定義成暫存器變數,如迴圈控制變數等。
作用域規則
每個 塊都有自己的命名規則。外層 塊的名字總是有效的,除非內層的 塊對它進行了重新定義。如果內層 塊的名字進行了重新定義,那麼在這個內層 塊中,外層 塊的名字被隱藏或遮蔽。塊可以巢狀多層,其深度取決於系統限制。include int main printf 3d 3d 5.1f n a,b,c 4 ...
儲存時間和作用域
自動儲存時間 靜態儲存時間 動態儲存時間 1 自動變數 在一對大括號的範圍內宣告的變數,稱為自動變數,具有區域性作用域,乙個自動變數在 作用域 中的時間從宣告他的那一刻開始,一直到包含器宣告的 塊結束為止。由棧記憶體自動分配。棧預設的容量是1mb.自動變數 出生 於他被定義之時,占用的空間在棧上分配...
10 儲存類 作用域和編譯預處理
資料型別確定變數所需儲存單元的大小,儲存類別確定變數在記憶體中的儲存位置,從而確定其作用域和生存週期。在c語言中,儲存類別可以分為自動類和靜態類兩種。區域性變數既可以說明成自動類,也可以說明成靜態類 全域性變數只能是靜態類。auto 自動的 register 暫存器的 static 靜態的 exte...