全域性變數和區域性變數

2022-07-28 05:24:15 字數 902 閱讀 3115

#include //

int b;

int add ( int

a )

int b = 20

;int sub ( int

a )

int main (void

)

什麼是全域性變數 ?定義在函式外面的變數,如 上面的 b ,這個例子中有兩個點需要注意:

(1) 如果把最前面的  int b 注釋了,雖然b是全域性的,但是編譯仍然報錯,在編譯到 add函式的時候提示 變數 b  未定義;

我就納悶兒了,b既然是全域性變數,在add中為什麼不能用呢? 同樣的**用js 來重寫一下,執行正常;

現在做點改變 ,前面的int b 還是注釋了的,然後我把 add函式的定義和 int b = 20 換一下先後順序,編譯正常;

int b = 20

;int add ( int

a )

原因處在**?  首選 用js 之所以可以順利通過,是因為js的動態語言特性,在需要呼叫函式的時候才回去找這個全域性變數存不存在,而靜態編譯語言在編譯的時候

就會去找這個變數存在不存在, 起初,在定義add函式前  沒有關於b的定義或宣告,所以此時add函式體內的b是未定義的,解決辦法就是,要麼把b的定義放到add函式定義之前,

要麼在add定義後定義b,但是要在add定義前宣告有這麼乙個全域性變數,add函式在編譯的時候才知道取找b;

(2) 全域性變數和區域性變數定以後如果沒有初始化乙個值,結果是不一樣的,全域性變數在定義後如果沒有初始化,系統會自動把值填充為0,而區域性

變數不會填充,比如定義 乙個區域性變數c  但是沒有初始化,那麼c的值就是c所在記憶體中的乙個隨機值,這個值可能是以前的程式在這塊記憶體執行後殘留的值,區域性

變數如果不初始化,會帶來意想不到的結果;

全域性變數和區域性變數

全域性變數 可以被不同的函式 類或檔案呼叫的變數,在函式外定義。區域性變數 只能在函式內使用,定義在函式內。區域性變數的使用 class myclass def myfun num 12 print myfun num num 正確 def myfun2 num num 1 print mufun ...

全域性變數和區域性變數

區域性變數 在方法中開闢的變數,只在方法中有效 區域性變數在定義時不會初始化,要顯式的給它乙個值 如未給它乙個初始值,雖然編譯的時候會通過,但是執行的時候會產生為初始化錯誤!方法呼叫 執行完,區域性變數便會自動釋放。在方法內的語句塊中建立的變數在編譯時假如未初始,如若使用,也會報未初始化錯誤!呼叫的...

全域性變數和區域性變數

通常的認為是定義在函式外面的就稱之為全域性變數 函式體內的稱之為區域性變數 在函式中與全域性變數同名的時候 情形1 函式內部的變數名如果第一次出現,且出現在 前面,即被視為定義乙個區域性變數。num 100 定義乙個全域性變數 defdemo num 100 這裡面的實際上是定義了乙個區域性的變數 ...