C語言變數型別

2021-06-26 05:51:57 字數 2072 閱讀 2786

c語言變數型別

auto

static

external

static external

register

auto 區域性變數

auto 變數是用堆疊(stack)方式占用儲存器空間,因此,當執行此區段是,系統會立即為這個變數分配儲存器空間,而程式執行完後,這個堆疊立即被系統收回.在大括號{}內宣告.

自動變數就是指在函式內部定義使用的變數。他只是允許在定義他的函式內部使用它。在函式外的其他任何地方都不能使用的變數。自動變數是 區域性變數,即它的區域性是在定義他的函式內部有效。當然這說明自動變數也沒有鏈結性,因為它也不允許其他的檔案訪問他。由於自動變數在定義他的函式的外面 的任何地方都是不可見的,所以允許我們在這個函式外的其他地方或者是其他的函式內部定義同名的變數,他們之間不會發生衝突的。因為他們都有自己的區域性, 而且它沒有鏈結性(即:不允許其他的檔案訪問他的)。來看看自動量的持續性。計算機在執行這個函式的時候,建立並為它分配記憶體,當函式執行完畢返回後,自 動變數就會被銷毀。這個過程是通過乙個堆疊的機制來實現的。為自動變數分配記憶體就壓棧,而函式返回時就退棧。

static 靜態變數

static 變數是c程式編譯器以固定位址存放的變數,只要程式不結束,記憶體不被釋放.

靜態變數與自動變數的本質區別是,靜態變數並不像自動變數那樣使用堆疊機制來使用記憶體。而是為靜態變數分配固定的記憶體,在程式執行的整個過程中,它都會被 保持,而不會不銷毀。這就是說靜態變數的持續性是程式執行的整個週期。這有利於我們共享一些資料。如果靜態變數在函式內部定義,則它的作用域就是在這個函 數內部,僅在這個函式內部使用它才有效,但是它不同於自動變數的,自動變數離開函式後就會別銷毀,而靜態變數不會被銷毀。他在函式的整個執行週期內都會存 在。在函式外面定義的變數為全域性變數,工程內的所有檔案都可以訪問他,但是它在整個工程內只能定義一次,不能有重複的定義,不然就會發生錯誤,而其他的文 件要想使用這個變數,必須用extern來宣告這個變數,這個宣告叫做引用宣告。這一點很重要,如過你沒有用extern 來宣告在其他檔案中已經定義的全域性變數,就來使用它,就會發生錯誤如果你只是想在定義他的檔案中使用它,而不允許在其他的檔案中使用它,那麼就用關鍵字 static來在函式外面宣告變數。這樣這個變數在其他檔案中將不可見,即它的連線性而內部鏈結。有一點是我們只得注意的像:如果你在函式外這樣宣告乙個 變數,const int a ; 變數a的連線性為內部鏈結,只能在定義他的檔案內使用。還有如果你在定義靜態變數的時候並沒有給變數初始化,則靜態變數將被自s動初始化為0;

external 變數

外部變數 定義在程式外部,所有的函式很程式段都可以使用.

外部變數可能會在某一程式段被重新定義,以段內變數為參考值.

static external 變數

靜態外部變數和外部變數差別在於,外部變數生命可以同時給多個檔案使用,而靜態外部變數則只能給宣告此變數的檔案使用.

register 變數

暫存器變數,是由暫存器分配空間,訪問速度比訪問記憶體快,加快執行速度.暫存器大小有限.

在c語言當中可以使用暫存器變數來優化程式的效能,最常見的是在乙個函式體當中,將乙個常用的變數宣告為暫存器變數:

register int ra; 

如果可能的話,編譯器就會為它分配乙個單獨的暫存器,在整個函式執行期間對這個變數的操作全都是對這個暫存器進行操作,這時候就不用頻繁地去訪存了,自然就提高了效能。但是暫存器變數不是強制性的,也就是說,即使你使用

register

關鍵字去宣告乙個變數為暫存器變數,編譯器還是有可能把它作為乙個普通的變數而不是暫存器變數來使用的。

需要注意的是,目前c編譯器還不允許全域性暫存器變數,也就是說暫存器變數只能是區域性變數或者函式形參變數,而且最好是int,char或者指標型別變數。在宣告暫存器變數的時候,可以制定使用哪個暫存器,在x86平台上常用的有」

ebp, ebx, esi, edi

「。 可以這樣宣告: register int local_var __asm__("ebp"); 這時候需要在編譯程式的時候給出特別的選項,因為有些暫存器原本是另有用途的,比如ebp暫存器,原來是做frame-pointer用途的,在除錯程式 的時候可以用它來跟蹤程式的呼叫關係。這時候我們使用

-fomit-frame-pointer 

選項來指明這一點。

C語言變數型別

c語言有豐富的資料型別和運算子,因此計算能力非常強大,計算過程中使用的值一般用變數來儲存。變數也是有分型別的,不同型別的變數有不同的儲存型別 不同的生命週期 不同的作用域,c語言也提供了一些關鍵字來設定變數的屬性 比如設定儲存型別 生命週期 1 變數的作用域 c語言根據變數作用域的不同,將變數分為區...

C語言變數型別

c 語言中常用的變數型別包括以下幾類 區域性變數 自動變數 外部變數 全域性變數 靜態變數和暫存器變數 暫存器變數不常用,因此不做整理 1 區域性變數 區域性變數也稱為自動變數,是在函式內或程式塊內定義的變數,是一種 臨時 的變數,隨著函式 或程式塊 的執行而生成,隨著函式 或程式塊 的退出而消失。...

C語言 變數型別

c語言根據變數作用域的不同,將變數分為區域性變數和全域性變數。1 區域性變數 定義 在函式內部定義的變數,稱為區域性變數。形式引數也屬於區域性變數。作用域 區域性變數只在定義它的函式內部有效,即區域性變數只有在定義它的函式內部使用,其它函式不能使用它。2 全域性變數 定義 在所有函式外部定義的變數,...