C變數的儲存方式

2021-06-26 19:18:02 字數 2026 閱讀 3949

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

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

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

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

***************==

根據譚浩強的c總結:

作用角度度分:

區域性變數:

自動變數,即動態區域性變數(離開函式,值就消失)

靜態區域性變數(離開函式,值保留)

暫存器變數(離開函式,值就消失)

(形式引數可以定義為自動變數或暫存器變數)

全域性變數:

靜態外部變數(只限本檔案應用)

外部變數(即非靜態的外部變數,執行其他檔案應用)

生存週期劃分:

動態儲存:在呼叫函式時臨時分配單元;

靜態儲存:程式整個執行時間都存在;

動態儲存:

自動變數(本函式內有效)

暫存器變數(本函式內有效)

形式引數(本函式內有效)

靜態儲存:

靜態區域性變數(函式內有效)

靜態外部變數(本檔案內 有效)

外部變數(其他檔案可以應用)

存放位置劃分:

靜態儲存區:

靜態區域性變數

靜態外部變數(函式外部靜態變數)

外部變數(可以被其他檔案引用)

動態儲存區:

自動變數

形式引數

cpu中的暫存器:暫存器變數

******************************

全域性變數:變數的儲存型別(變數的生存期):是指為變數分配使用記憶體空間的方式,也稱儲存方式。

靜態儲存:外部變數(所有函式之外的定義的變數為外部變數,屬全域性變數,使用靜態儲存方式儲存,儲存在全域性區,即靜態區)和靜態變數

動態儲存:自動變數(屬於區域性變數)和暫存器變數(儲存在cpu的暫存器,只有區域性變數才能定義為暫存器變數,將變數定義為暫存器變數後就不能對期取址,因為暫存器是沒有記憶體位址的)

自動變數(auto)----生存期:定義該變數的函式被呼叫時才給它分配儲存單元,開始它的生存期,函式呼叫結束,釋放儲存單元,結束生存期;作用域:定義它的函式或復合語句內。注,系統不會為其進行預設的初使化賦值值。

暫存器變數(register)----暫存器變數是區域性變數,使用動態儲存方式,只有 區域性自動變數和形式引數才可以作為暫存器變數。

外部變數----也稱全域性變數。具有全域性作用域,只需在乙個原始檔中定義,就可以作用於所有的原始檔,當然,其他不包含全域性變數定義的原始檔需要用extern關鍵字再次宣告這個全域性變數。

靜態變數

----靜態區域性變數:在函式內定義,但當函式退出後,靜態區域性變數始終還存在,其占用的記憶體單元不會被人釋放,只有當程式結束時,才會隨全域性變數一起釋放。

生存期:整個源程式(從變數定義開始到程式結束)。

作用域:定義該變數的函式內。退出該函式後,儘管該變數還存在,但不能使用它。如果再次呼叫定義它的函式時,它又可繼續使用,而且儲存了前次被人呼叫後留下的值;靜態全域性變數:只能在其所在檔案模組中的函式中使用。其他檔案模組中的函式將不能訪問。

記憶體區域的劃分:

棧區:由編譯器自動分配和釋放的記憶體區域,用於存放函式的引數值,區域性變數的值等。隨著函式的呼叫和返回,棧區的資料將動態變化。

堆區:程式設計師向系統申請或釋放。若程式設計師在程式結束時還沒有釋放,則可能由作業系統**。malloc.

全域性區:用來儲存全域性變數和靜態變數。在進入程式時分配區域,程式結束後由系統釋放。

文字常量區:用於儲存常量字串的記憶體區域,程式結束後,由系統釋放。

程式**區:用於儲存函式體的二進位制**。

c語言的變數儲存方式

c語言的變數儲存方式靜態儲存方式與動態儲存方式 具體 自動的 靜態的 暫存器的register 外部的extern 在記憶體中的使用者的儲存空間分為 程式區 靜態儲存區 動態儲存區。靜態儲存方式 在程式執行期間,系統對變數分配的固定空間。動態儲存方式 在程式執行期間,系統對變數分配的動態空間 1 用...

C 浮點型變數的儲存方式

浮點型是c 定義的基本型別。型別float double和long double分別表示單精度浮點數 雙精度浮點數和擴充套件精度浮點數。在visual studio中,float型別用4個位元組表示,double和long double用8個位元組表示。預設的浮點字面值常量為double型別。在數值...

const變數的儲存方式

在帖子的最後,有這麼乙個很有趣的實驗 cpp view plain copy const inta 1 int p const cast int a p 2 cout value a a endl cout value p p endl cout address a a endl cout addr...