修飾符:全域性變數在原始檔的[b]函式外部宣告(不含extern)[/b],但若其它原始檔要呼叫這個變數,就需要[b]通過extern關鍵字[/b]來引用一下。靜態變數用static來修飾;
生命週期:兩者都是在程式編譯時或程式裝入時由系統自動分配的,程式結束時消亡;
由於它們都是由系統分配的儲存空間,所以它們的儲存位址是固定的,但值是可變的。
靜態變數的宣告與呼叫
static int fun = 6;
void function_static1111(int i)
void function_static2222(int i)
int main(void)
/*result:1 2 4 5 6 106*/
全域性變數的宣告與呼叫
/*
* filea.c
*/int print = 100; /*宣告全域性變數並初始化,注意:不帶extern修飾符*/
void printmessage()
/*
* fileb.c
*/void changeprint(int i)
void ghellops()
/*default : print = 100
after change : print = 3*/
後記:****,有的資料書害死人了,很不負責任,競敢說c中用extern來宣告全域性變數,若不是老夫親自驗證,我還真相信吶。看來我的參考書有問題,很多語句模稜兩可,翻譯得很粗糙,害死我了 :shock: 。[b]btw:誰有比較好的c入門資料?有的話就pm我,感激不盡 :) [/b]。
全域性變數與全域性靜態變數的區別
全域性變數與全域性靜態變數的區別 a 若程式由乙個原始檔構成時,全域性變數與全域性靜態變數沒有區別。b 若程式由多個原始檔構成時,全域性變數與全域性靜態變數不同 全域性靜態變數使得該變數成為定義該變數的原始檔所獨享,即 全域性靜態變數對組成該程式的其它原始檔是無效的。c 具有外部鏈結的靜態 可以在所...
全域性變數與全域性靜態變數的區別
全域性變數與全域性靜態變數的區別 a 若程式由乙個原始檔構成時,全域性變數與全域性靜態變數沒有區別。b 若程式由多個原始檔構成時,全域性變數與全域性靜態變數不同 全域性靜態變數使得該變數成為定義該變數的原始檔所獨享,即 全域性靜態變數對組成該程式的其它原始檔是無效的。c 具有外部鏈結的靜態 可以在所...
靜態變數與全域性變數的區別
靜態區域性變數和普通全域性變數以及靜態全集變數在編譯時,編譯器會自動給他們分配位址。而且是從mcu上電執行開始,一直駐留,不會被 的。而真正的區別在於他們的作用域。靜態區域性變數的作用域是在於定義它的那個函式內。由於其在編譯時編譯器就給他們分配了位址,並且做了初始化,所以它只能被初始化一次,而且看起...