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

2021-04-21 21:24:02 字數 1001 閱讀 1657

全域性和靜態變數都在堆裡。

全域性變數的作用範圍是整個程式(如果程式是多個檔案,必須在其他的檔案中說明)。

靜態變數的作用範圍要看靜態變數的位置,如果在函式裡,則作用範圍 就是這個函式。

靜態全域性變數,只在本檔案可以用,雖然整個程式包含多個檔案,但靜態全域性變數只能用在定義它的那個檔案裡,卻不能用在程式中的其他檔案裡。它是定義儲存因型為靜態型的外部變數,其作用域是從定義點到程式結束,所不同的是儲存型別決定了儲存地點,靜態型變數是存放在記憶體的資料區中的,它們在程式開始執行前就分配了固定的位元組,在程式執行過程中被分配的位元組大小是不改變的,只有程式執行結束後,才釋放所占用的記憶體。

全域性變數是沒有定義儲存型別的外部變數,其他用域是從定義點到程式結束,省略了儲存型別符,系統將預設為自動型。

自動型變數存放在堆疊區中,堆疊區也是記憶體中一部分,該部分內存在程式執行中是重複使用的。

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

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

全域性變數和靜態變數如果沒有手工初始化,則由編譯器初始化為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 全域性變數具有全域性作用域。全域性變數只需在乙個原始檔中定義,就可以作用於所有的原始檔。當然,其他不包含全域性變數定義的原始檔...