1.在函式中的區域性變數,量在該函式結束後自己主動撤銷
2.函式內的復合語句中的區域性變數(比方for語句),這個變數在復合語句結束後自己主動撤銷。這個變數能夠與1中的變數重名,在復合語句作用域中裡面定義的變數許可權更高,考慮到可讀性不推薦這麼做
比如:
#include#includevoid fun1();
int main()
void fun1()
printf("%d\n",m);
system("pause");
}//輸出結果為:5 200
定義在全部函式外部的變數,須要注意和區分的是變數的定義和宣告。僅僅要在全部函式外面定義的變數就是全域性變數 ,所以這個變數不一定在乙個檔案的最前面幾行**,假設這個變數定義在乙個函式的後面。而這個函式須要用到這個變數,那麼這個變數就需在這個函式之前宣告或者在這個函式內部宣告方可使用,假設這個變數定在這個函式的前面,那麼能夠省去宣告。
定義乙個變數的一般形式:extern 型別說明符 變數名 (比方:int a ,在定義的時候extern能夠省略。)
宣告乙個變數的一般形式:extern 型別說明符 變數名 (宣告變數時extern不能夠省略,)
能夠用keyword static(描寫敘述靜態變數) extern(描寫敘述外部變數) 來定義乙個'
靜態儲存
的變數『,注意引號之間的措詞,也就是說靜態變數是採用靜態儲存方式,而全域性變數也是採用靜態儲存方式,靜態變數和靜態儲存不是乙個意思 ·
靜態變數一直存在,在預編階段分配了記憶體空間,直到整個程式結束才銷毀
能夠用keyword auto(描寫敘述自己主動變數,假設定義乙個變數不寫描寫敘述符那麼就是預設的auto) register(描寫敘述暫存器變數) 來定義乙個
動態儲存
的變數。
動態變數在該函式或該復合語句開始執行時分配,結束時自己主動清除記憶體
比如:函式的形參,在定義函式時並不分配記憶體,僅僅有在呼叫時分配。呼叫結束後自己主動釋放記憶體
復合語句也乙個道理
靜態區域性變數在函式內定義。他的生存週期為整個程式執行期間,可是其作用域任然與自己主動變數同樣,僅僅能在定義該變數的函式內使用該變數,函式呼叫結束後雖然該變數還繼續存在,但不能直接訪問它,假設在整個程式執行期間再次呼叫定義它的那個函式,在這個函式內可
繼續使用這個變數,變數的值為上次函式呼叫完時的狀態。這一點非常實用。當然所有變數也能夠實現一樣的效果,可是easy產生***。
這個在程式執行期間一直有效,
須要注意的是 靜態全域性變數 和非靜態全域性變數(全域性變數)
乙個程式往往有非常多原始碼。乙個原始檔裡包括了另外乙個原始碼檔案,
總結來說就是:全域性變數在全部包括了它的原始檔裡均有效,而靜態全域性變數僅僅有在定義它的原始檔裡有效,
總的結論:經過區域性變數,而不是靜態變數改變其儲存,這改變了它的生命週期;經過全域性變數靜態變數改變其範圍。限制其範圍
C語言之變數型別和儲存方式
變數可以分為全域性變數 靜態全域性變數 區域性變數和靜態區域性變數 變數的宣告有兩種情況 1 一種是需要建立儲存空間的 定義性宣告 例如int a 在生命的時候就已經建立了儲存空間。2 另一種是不需要建立儲存空間的 引用性宣告 例如extern int a 其中變數a是在別的檔案中定義的。記憶體區域...
c語言的變數儲存方式
c語言的變數儲存方式靜態儲存方式與動態儲存方式 具體 自動的 靜態的 暫存器的register 外部的extern 在記憶體中的使用者的儲存空間分為 程式區 靜態儲存區 動態儲存區。靜態儲存方式 在程式執行期間,系統對變數分配的固定空間。動態儲存方式 在程式執行期間,系統對變數分配的動態空間 1 用...
C語言 變數儲存型別
c語言中,變數儲存型別指的是儲存變數的記憶體的型別,主要分為三種 普通記憶體 執行時堆疊 硬體暫存器。變數儲存在那種型別的記憶體中和變數的作用域有很大的關係。首先,分析一下變數的作用域。作用域與宣告的位置有關。在乙個原始檔中,變數宣告的位置有兩種 在 塊內和 塊外。塊指的是被花括號 包圍的一段 1 ...