搞懂全域性變數 外部變數 靜態全域性變數的區別

2021-10-10 14:53:40 字數 1184 閱讀 7413

全域性變數是在函式的外部定義的,它的作用域為從變數定義處開始,到本程式檔案的末尾。

如果外部變數不在檔案的開頭定義,其有效的作用範圍只限於定義處到檔案終了。

如果同乙個原始檔中,全域性變數與區域性變數同名,則在區域性變數的作用範圍內,全域性變數被「遮蔽」,即它不起作用。

如果寫在檔案的開頭,可以省略extern。

在靜態儲存區分配儲存空間

#include

#include

int a=5;

//全域性變數a,寫在檔案的開頭,省略extern

void

print_a()

intmain

(void

)

結果:

5

10

全域性變數在整個程式中起作用,如果程式包含多個程式檔案模組,可以通過外部宣告,使得全域性變數的作用範圍擴充套件到其他模組,也可以通過定義靜態全域性變數,使其作用範圍僅限制在這個模組

全域性變數只能被定義一次,如果其他模組要使用該全域性變數,需要通過外部變數的宣告。

外部變數宣告格式: extern 變數名錶;

只起說明作用,不分配儲存單元,對應儲存單元在全域性變數定義時分配。

main.c

#include

int count ;

extern

void

write_extern()

;int

main()

support.c

#include

extern

int count;

void

write_extern

(void

)

當程式只有乙個檔案模組,其與一般全域性變數作用相同; 當程式有多個模組時,c語言靜態全域性變數的作用範圍侷限於該模組。

全域性變數和靜態全域性變數

全域性變數和區域性變數是從變數的作用域的角度劃分。靜態變數和動態變數是從變數的記憶體分配的角度劃分。全域性變數本身就是靜態儲存方式,靜態全域性變數當然也是靜態儲存方式。這兩者在儲存方式上並無不同,區別在於非靜態全域性變數的作用域是整個源程式,當乙個源程式由多個原始檔組成時,非靜態的全域性變數在各個原...

c 全域性變數 靜態全域性變數

全域性變數是靜態儲存方式,靜態全域性變數也是靜態儲存方式,這兩者在儲存方式上並無不同。區別 雖在於非靜態全域性變數的作用域是整個源程式,當乙個源程式由多個原始檔組成時,靜態全域性變數在各個原始檔中都是有效的。靜態區域性變數則限制了其作用域,只在定義該變數的原始檔內有效,在同一源程式的其它原始檔中不能...

C 全域性變數 靜態全域性變數 靜態區域性變數

全域性變數儲存在靜態儲存區,其作用域是全域性作用域,生命週期是整個程式的生命週期。具體而言,在乙個檔案中定義乙個全域性變數,在程式的其它檔案中可以通過extern關鍵字再次宣告說明該變數已經定義。靜態全域性變數儲存在靜態儲存區,其作用域只能是定義該變數的檔案,生命週期是整個程式的生命週期。靜態區域性...