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

2021-06-06 23:11:49 字數 1057 閱讀 9952

儲存的地方是一樣的,不同之處在於它們的作用域不同: 

全域性變數基本上在程式的任何地方都能被看到 

而靜態區域性變數只能在其指定的範圍內被使用 

比如 int   i   ;     //   全域性變數 

class   c 

void   main() 

全域性變數具有外部連線性,即同一工程中其它檔案中的也可引用。 

而靜態變數不具有外部連線性,即同一工程中其它檔案中不可以引用。 

如:  

extern   int   x=10; 

static   int   y=5; 

#include  

void   main() 

將這兩個檔案放在同一工程中,你發現每一檔案單獨編譯能通過,但作為工程不能構成.exe檔案執行。若將有關變數y的行注釋後(或將static換成extern)就可以了。這是因為靜態變數的作用域在本檔案內,不能擴充到其它檔案。其作用是當多人合作開發乙個工程時,僅在自己的檔案內使用的全域性變數用靜態變數不會與其他人用的變數相混淆,這就是識別符號的一致性。

變數可以分為全域性變數、靜態全域性變數、靜態區域性變數和區域性變數 

按儲存區域分:全域性變數、靜態全域性變數和靜態區域性變數都存放在記憶體的全域性資料區,區域性變數存放在記憶體的棧區 

按作用域分:全域性變數在整個工程檔案內都有效;靜態全域性變數只在定義它的檔案內有效;靜態區域性變數只在定義它的函式內有效,只是程式僅分配一次記憶體,函式返回後,該變數不會消失;區域性變數在定義它的函式內有效,但是函式返回後失效。 

全域性變數和靜態變數如果沒有手工初始化,則由編譯器初始化為0。區域性變數的值不可知。 

**如下: 

#include  

extern   int   a;//變數宣告,不是定義 

static   int   b=5; 

void   func1() 

int   a; 

int   b=10; 

void   func2() 

void   func1(); 

void   main() 

輸出結果為 

5 20 1 2

全域性變數和靜態變數

變數可以分為全域性變數 靜態全域性變數 靜態區域性變數和區域性變數 按儲存區域分 全域性變數 靜態全域性變數和靜態區域性變數都存放在記憶體的全域性資料區,區域性變數存放在記憶體的棧區 按作用域分 全域性變數在整個工程檔案內都有效 靜態全域性變數只在定義它的檔案內有效 靜態區域性變數只在定義它的函式內...

全域性變數和靜態變數

如果定義乙個全域性變數,未被初始化,則變數被預設初始化,但區域性變數未被初始化,則該值未定義。內建型別和陣列一樣 定義全域性靜態變數 在全域性變數前加個關鍵字static,該全域性變數變為全域性靜態變數。全域性靜態變數有以下特點 1 在全域性資料區內分配記憶體 2 如果沒有初始化,其預設值為0 3 ...

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

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