C系列 全域性變數與靜態變數的區別

2021-08-30 01:48:12 字數 873 閱讀 8911

修飾符:全域性變數在原始檔的[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上電執行開始,一直駐留,不會被 的。而真正的區別在於他們的作用域。靜態區域性變數的作用域是在於定義它的那個函式內。由於其在編譯時編譯器就給他們分配了位址,並且做了初始化,所以它只能被初始化一次,而且看起...