這裡簡單的說下區域性變數和全域性變數和靜態變數的關係。
首先,全域性變數儲存在靜態儲存區;
區域性變數儲存在動態儲存區,是儲存在棧裡的;
靜態變數 型別說明符是static。
靜態變數屬於靜態儲存方式,其儲存空間為記憶體中的靜態資料區(在靜態儲存區內分配儲存單元),該區域中的資料在整個程式的執行期間一直占用這些儲存空間(在程式整個執行期間都不釋放),也可以認為是其記憶體位址不變,直到整個程式執行結束(相反,而auto自動變數,即動態區域性變數,屬於動態儲存類別,佔動態儲存空間,函式呼叫結束後即釋放)。靜態變數雖在程式的整個執行過程中始終存在,但是在它作用域之外不能使用。
另外,屬於靜態儲存方式的量不一定就是靜態變數。例如:外部變數雖屬於靜態儲存方式,但不一定是靜態變數,必須由 static加以定義後才能成為靜態外部變數,或稱靜態全域性變數。
所有的全域性變數都是靜態變數,而區域性變數只有定義時加上型別修飾符static,才為區域性靜態變數。
靜態變數可以在任何可以申請的地方申請,一旦申請成功後,它將不再接受其他的同樣申請。
靜態變數並不是說其就不能改變值,不能改變值的量叫常量。其擁有的值是可變的 ,而且它會保持最新的值。說其靜態,是因為它不會隨著函式的呼叫和退出而發生變化。即上次呼叫函式的時候,如果我們給靜態變數賦予某個值的話,下次函式呼叫時,這個值保持不變。
此外,
new,malloc分配的記憶體儲存在堆裡
區域性變數,區域性靜態變數,全域性變數,全域性靜態變數分別
c 記憶體到底分幾個區?一 1 棧區 stack 由編譯器自動分配釋放 存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧。2 堆區 heap 一般由程式設計師分配釋放,若程式設計師不釋放,程式結束時可能由os 注意它與資料結構中的堆是兩回事,分配方式倒是類似於鍊錶,呵呵。3 全域性...
全域性變數,全域性靜態變數,區域性靜態變數,區域性變數
變數可以分為全域性變數 靜態全域性變數 靜態區域性變數和區域性變數。按照儲存區分 全域性變數 靜態全域性變數和靜態區域性變數都存放在記憶體的全域性資料區,區域性變數存放在記憶體的棧區。按作用域分 全域性變數在整個工程檔案內都有效 靜態全域性變數只在定義它的檔案內有效 靜態區域性變數只在定義它的函式內...
區域性變數,區域性靜態變數,全域性變數,全域性靜態變數分別
c 記憶體到底分幾個區?一 1 棧區 stack 由編譯器自動分配釋放 存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧。2 堆區 heap 一般由程式設計師分配釋放,若程式設計師不釋放,程式結束時可能由os 注意它與資料結構中的堆是兩回事,分配方式倒是類似於鍊錶,呵呵。3 全域性...