全域性和靜態變數都在堆裡。
全域性變數的作用範圍是整個程式(如果程式是多個檔案,必須在其他的檔案中說明)。
靜態變數的作用範圍要看靜態變數的位置,如果在函式裡,則作用範圍 就是這個函式。
靜態全域性變數,只在本檔案可以用,雖然整個程式包含多個檔案,但靜態全域性變數只能用在定義它的那個檔案裡,卻不能用在程式中的其他檔案裡。它是定義儲存因型為靜態型的外部變數,其作用域是從定義點到程式結束,所不同的是儲存型別決定了儲存地點,靜態型變數是存放在記憶體的資料區中的,它們在程式開始執行前就分配了固定的位元組,在程式執行過程中被分配的位元組大小是不改變的,只有程式執行結束後,才釋放所占用的記憶體。
全域性變數是沒有定義儲存型別的外部變數,其他用域是從定義點到程式結束,省略了儲存型別符,系統將預設為自動型。
自動型變數存放在堆疊區中,堆疊區也是記憶體中一部分,該部分內存在程式執行中是重複使用的。
按儲存區域分,全域性變數、靜態全域性變數和靜態區域性變數都存放在記憶體的靜態儲存區域,區域性變數存放在記憶體的棧區。
按作用域分,全域性變數在整個工程檔案內都有效;靜態全域性就量只在定義它的檔案內有效;靜態區域性變數只在定義它的函式內有效,只是程式僅分配一次記憶體,函式返回後,該變數不會消失;區域性變數在定義它的函式內有效,但是函式返回後失效。
全域性變數和靜態變數如果沒有手工初始化,則由編譯器初始化為0。區域性變數的值不可知。
**如下:
//test.cpp
#include
extern int a;//變數宣告,不是定義
static int b=5;
void func1()
//main.cpp
int a;
int b=10;
void func2()
void func1();
void main()
輸出結果為
5
20
1
2
全域性變數 靜態全域性變數 靜態區域性變數 區域性變數
全域性和靜態變數都在堆裡。這句話應該錯了,應該是放在常量資料段 全域性變數的作用範圍是整個程式 如果程式是多個檔案,必須在其他的檔案中說明 靜態變數的作用範圍要看靜態變數的位置,如果在函式裡,則作用範圍 就是這個函式。靜態全域性變數,只在本檔案可以用,雖然整個程式包含多個檔案,但靜態全域性變數只能用...
全域性變數 靜態全域性變數區域性變數 靜態區域性變數
對於乙個完整的程式,在記憶體中的分布情況如下圖 區 low address 全域性資料區 堆區 棧區 high address 一般程式把新產生的動態資料存放在堆區,函式內部的自動變數存放在棧區。自動變數一般會隨著函式的退出而釋放空間,靜態資料 即使是函式內部的靜態區域性變數 也存放在全域性資料區。...
全域性變數,靜態全域性變數,靜態區域性變數,區域性變數
1.從作用域看 c 變數根據定義的位置的不同的生命週期,具有不同的作用域,作用域可分為6種 全域性作用域,區域性作用域,語句作用域,類作用域,命名空間作用域和檔案作用域。1 全域性變數具有全域性作用域。全域性變數只需在乙個原始檔中定義,就可以作用於所有的原始檔。當然,其他不包含全域性變數定義的原始檔...