全域性變數和區域性變數

2021-09-08 19:27:54 字數 1330 閱讀 2345

經常在c語言中遇到這樣的情況,乙個.c檔案中定義的 全域性變數例如i,在另乙個.c檔案中能用使用嗎?

答案是:可以的,全域性變數預設是extern的,函式也是。如果你寫了static修飾它就不行了

下面是各個概念:

全域性變數:

例如在單個.c檔案中

int a, b;  //全域性變數

void func1()

float x,y; //全域性變數

int func2()

int main()

int a, b;  //全域性變數

void func1()

float x,y; //全域性變數

int func2()

int main()

上面的變數a,b就是全域性變數。在有的時候,專案是進行劃分的,會有不同個.c檔案的出現,如果在不同.c**現例如變數a、b這樣的變數,

區域性變數:

區域性變數只有區域性作用域,它只在函式呼叫執行期間存在,函式一次呼叫執行結束後,變數被撤銷,其所占用的的記憶體也被**

例如:

int f1(int a)

int main()

靜態全域性變數:

靜態全域性變數具有全域性作用域,,它只編譯期被始化一次,它不能用變數來初始化。它作用於定義它的檔案裡,不能作用到其它的檔案裡。這樣即使多個不同的原始檔定義了同名的靜態全域性變數,他們也是不同的變數。

靜態區域性變數:

靜態區域性變數只有區域性作用域,它只編譯期被始化一次,它不能用變數來初始化。在它初始化之後便一直存在,直到程式執行結束。它與全域性變數的區別是:全域性變數是對所有的函式是可見的,而靜態區域性變數只對定義自己的函式體始終可見。

巨集:巨集定義又稱為巨集代換、巨集替換,簡稱「巨集」。在預編譯(即巨集展開)階段使用具體的內容替換巨集名,預編譯過程是不做語法檢查的,這樣導致在巨集在程式**錯不好判斷。

巨集與變數的區別:

巨集定義不分配記憶體,變數定義需要分配記憶體

巨集不分資料型別,變數區分資料型別。

巨集定義之後值是不能改變的,變數的值是可以改變的

巨集與const常變數的區別:

巨集系統不為它分配記憶體,const定義的常量系統為它分配記憶體

巨集在預編譯階段直接進行替換過,不進行資料型別及語法的檢驗, const定義的常量在編譯時進行嚴格的型別和語法檢驗,可以避免出錯。

分配記憶體空間:

分配記憶體空間:

區域性變數分配在棧空間;

全域性變數、靜態變數都分配在靜態儲存區;

巨集不分配記憶體空間

其他參考:

//函式宣告未給出時編譯器預設猜它是int 型的函式

全域性變數和區域性變數

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

全域性變數和區域性變數

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

全域性變數和區域性變數

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