區域性變數和全域性變數的差別

2021-06-26 09:42:53 字數 806 閱讀 6251

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

全域性變數、靜態變數如果沒有手動初始化,則有編譯器初始化為0。

區域性變數是編譯器永遠不會初始化的變數,如果沒有手動初始化,區域性變數的值為隨機值。

在函式內使用全域性變數,一般應做全域性變數說明,只有在函式內經過說明的全域性變數才能使用。

但在乙個函式之前定義的全域性變數,在該函式內使用可不再加以說明。

全域性變數說明:extern 型別說明符,變數名,變數名……;

在c++中,對變數的儲存型別有4種:

auto、register、extern、static

例如:static int a;                        a為靜態型別變數

auto char c;                       c為自動字元變數

static int a[2]=;             a為靜態整型陣列

extern  int x;                          x為外部整型變數

作用域有6種:

全域性作用域 、 區域性作用域  、語句作用域、 類作用域  、命名空間作用域  、檔案作用域

被static 關鍵字修飾過的變數具有檔案作用域。兩個不同的原始檔都定義了相同名字的靜態全域性變數,它們也是不同的變數。

分配記憶體空間

全域性變數、靜態全域性變數和靜態區域性變數都存放在記憶體的靜態儲存區域

區域性變數存放在記憶體的棧區。

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

全域性和靜態變數都在堆裡。這句話應該錯了,應該是放在常量資料段 全域性變數的作用範圍是整個程式 如果程式是多個檔案,必須在其他的檔案中說明 靜態變數的作用範圍要看靜態變數的位置,如果在函式裡,則作用範圍 就是這個函式。靜態全域性變數,只在本檔案可以用,雖然整個程式包含多個檔案,但靜態全域性變數只能用...

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

全域性和靜態變數都在堆裡。全域性變數的作用範圍是整個程式 如果程式是多個檔案,必須在其他的檔案中說明 靜態變數的作用範圍要看靜態變數的位置,如果在函式裡,則作用範圍 就是這個函式。靜態全域性變數,只在本檔案可以用,雖然整個程式包含多個檔案,但靜態全域性變數只能用在定義它的那個檔案裡,卻不能用在程式中...

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

對於乙個完整的程式,在記憶體中的分布情況如下圖 區 low address 全域性資料區 堆區 棧區 high address 一般程式把新產生的動態資料存放在堆區,函式內部的自動變數存放在棧區。自動變數一般會隨著函式的退出而釋放空間,靜態資料 即使是函式內部的靜態區域性變數 也存放在全域性資料區。...