「static全域性變數與普通的全域性變數的區別是static全域性變數只初始化一次」是對的嗎?

時間 2021-06-17 16:51:46

1樓:開開心心學做人

static全域性變數應該叫靜態全域性變數,將符號的作用域限制在當前檔案內,不管有沒有static,全域性變數都只初始化一次。

2樓:fairlyblank

都只初始化一次。

static修飾的變數儲存在全域性儲存空間,和普通全域性變數一樣,但static修飾的變數對其他編譯單元不可見。

3樓:向陽

不是非常清楚想問的描述,所以我假設問的是這個位置是static:

inta

;static

intb

;static

void

funa

()void

funb

()好了,應該這個就符合這個問題,即static的全域性變數是過程間的(就是目前的這個檔案)還是全域性(所有的原始檔都能折騰到)的。很好的是static修飾的函式和變數效果一樣

編譯器輸出的是目標檔案,下一步是鏈結所有的目標檔案。目標檔案裡面有乙個東西叫做匯出符號表,鏈結過程會檢查所有目標檔案的匯出符號表,例如對於b.obj有個匯入符號_func_funb,而a.

obj有個匯出符號_func_funb,則鏈結器就會把它們繫結在一起

想通這一點後,static的作用就好解釋了——沒有static的全域性符號會作為匯出符號,而有static的則不會放進來。

於是乎,假如你正確定義了跨檔案的兩個int a,那麼它們會被繫結在一起,放在同一位置並不是初始化一次和初始化n次的區別。而其它檔案要用static int b,必須自己重新寫乙個,而不是自動構建個新的b。

Python全域性變數和區域性變數的問題?

留德華叫獸 sum 5 def add x,y print sum sum x y 這個報錯的原因是 同乙個方程scope下,變數sum僅可能是區域性或者全域性add方程並沒有宣告sum是全域性變數 所以第二行實際上是建立並賦值了乙個區域性變數sumsum x y 那麼在add方程下,sum只可能是...

python中使用全域性變數是否有什麼弊處?

冒泡 就py自己來說,主要還是太過靈活了,比如你可以不定義,直接global,或修改globals字典 a Traceback most recent call last File line 1,in NameError name a is not defined def fglobal a a 1...

全域性變數什麼時候在記憶體中申請空間呢?

Chu 已初始化的全域性變數和區域性靜態變數儲存在 data 段,在檔案中存在 未初始化的全域性變數和區域性靜態變數儲存在 bss 段,因未初始化資料都是 x00 儲存它們無意義,所以將其放於 bss,記錄大小,為變數預留位置,在檔案中不佔空間,引導程式時再分配。tmp cat src.c incl...