c++變數和函式包括兩個屬性:資料型別和資料的儲存型別。儲存型別是指資料在記憶體中儲存的方式。變數的儲存型別分為四種:自動型別
(auto),暫存器型別(register)、靜態型別(static)
外部型別(extern)其中,自動型別、暫存器型別的變數屬於動態變數;靜態型別、外部型別的變數屬於靜態變數。
(1)定義格式:
auto 型別
變數名;
(2)特性。
自動變數是動態區域性變數,具有塊作用域特點,存放在動態儲存區。定義時可加auto說明符,也可以省略,所以在程式中沒有進行特殊宣告都預設是auto型變數,系統以棧(stack)方式為auto變數分配記憶體空間,在變數作用域結束後,棧空間由系統進行自動**。如果自動變數在定義時未初始化,其值預設為隨機數。【示例
變數名;
(2)特性。
暫存器變數是動態區域性變數,具有區域性作用域,存放在cpu的暫存器或動態儲存區;這樣可以提高訪問速度,如果沒有存放在通用暫存器中,便按自動變數處理。
使用register變數應注意以下幾點:
由於通用暫存器的數量有限,暫存器型別的變數不宜過多。
變數的長度應與通用暫存器的長度相當。一般為int型或者char型。通常需要把一些頻繁使用的區域性變數定義為暫存器變數。
變數名;
在c++中規定靜態區域性變數有預設值,預設值分別為int型等於0, float型等於0.0,char型為』\0』,靜態全域性變數也是如此。而自動型別和暫存器型別變數沒有預設值,為隨機數
定義在函式內的靜態變數稱為靜態區域性變數。
特點如下:
(1)靜態區域性變數本身也是區域性變數,具有區域性變數的作用域。其作用域侷限在定義它的本函式體內,當離開該函式體後,不可使用該變數,但其值還繼續保留。也就是說函式結束時,靜態區域性變數的儲存空間不會被釋放。
(2)靜態區域性變數屬於靜態儲存類別的變數,在程式執行開始就被分配固定的儲存單元(占用靜態儲存區),整個程式執行期間不再被重新分配,生存期是整個程式的執行期間。
(3)靜態區域性變數的賦初值時間在編譯階段,且僅被初始化一次,並不是每發生一次函式呼叫就賦一次初值。當再次呼叫該函式時,靜態區域性變數會保留上次呼叫函式時的值
【示例】
分析:x是自動變數,每次呼叫結束時,變數x的儲存單元被釋放,然而y是是區域性靜態型別,靜態區域性變數的賦初值時間在編譯階段,且僅被初始化一次,並不是每發生一次函式呼叫就賦一次初值。當再次呼叫該函式時,靜態區域性變數會保留上次呼叫函式時的值。
在定義全域性變數時加說明符static,稱為靜態全域性變數。
靜態全域性變數只能被定義它的原始檔中的所有函式共享。而不能被其他原始檔中的函式使用,如果希望全域性變數在多個原始檔中被使用,則需通過外部(extern)關鍵字來宣告。
靜態全域性變數的特點如下。
(1)與全域性變數基本相同,其作用域是定義它的程式檔案中,而不是整個程式中的所有檔案。
(2)靜態全域性變數屬於靜態儲存類別的變數,所以它在程式一開始執行時,就被分配有檔案固定的儲存單元,預設初始化為0.其生存期是整個程式執行期間。
(3)使用靜態全域性變數的好處是同一程式的兩個不同源程式檔案中可以使用相同名稱的變數名,而互不干擾。
用部型別extern說明的全域性變數稱為外部變數
。extern只能修飾全域性變數
。其定義格式為
:extern 型別
變數名;
在由多個源程式檔案組成的程式中,如果乙個檔案要使用另乙個檔案中定義的全域性變數,這些源程式檔案之問通過外部型別的變數進行溝通。
在乙個檔案中定義的全域性變數預設為外部的,即作用域可以延伸到程式的其他檔案中。但其他檔案如果要使用這個檔案中定義的全域性變數,必須在使用前用extern作外部宣告,外部宣告通常放在檔案的開頭。
變數定義時編譯器為其分配儲存空間,而變數宣告指明該全域性變數已在其他地方說明過,編譯系統不再分配儲存空間,直接使用變數定義時所分配的空間。
靜態儲存(static)型別的作用域與外部(extern)儲存型別相反,一旦定義為靜態儲存型別,就限制該變數只能在定義它的檔案中使用,為檔案作用域。
c 變數的儲存型別
儲存型別是對於變數而言的。一方面,它可以反映變數的儲存空間的位置,另一方面它可以反映變數的生存期。c 的儲存型別有四種,自動型別 靜態型別,暫存器型別和外部型別。其格式如下 儲存型別 資料型別 變數名 1.自動型別 示例 auto int x 特點 1.採用動態分配方式,在棧區分配空間。當超出作用域...
c 變數儲存型別
extern 儲存型別 只宣告而不定義變數,變數的宣告只是告訴編輯器變數的名稱和資料型別 變數的定義是給變數分配儲存區域 優點就是可以在多個檔案裡面共享乙個全域性變數,static 儲存型別 static指的是靜態變數 又叫永續性變數 靜態變數分為兩種,第一種是區域性靜態變數在函式內定義的變數,該變...
C變數儲存型別
c語言程式中可以選擇變數的不同儲存形式,儲存型別分別為靜態儲存和動態儲存。我們可以通過儲存類修飾符來告訴編譯器要處理什麼樣的型別變數,具體有以下4種 auto 自動 static 靜態 register 暫存器 extern 外部 auto關鍵字是宣告乙個區域性變數為自動的,這就意味每次執行到定義該...