儲存型別定義了變數或函式的作用範圍及生命週期。這些說明符也宣告了他們的修改方式的型別。有如下幾種儲存型別:
auto
register
static
extern
mutable
auto儲存型別是所有區域性變數的預設儲存型別。
上面的例子中定義了兩個相同儲存型別的變數,auto 僅能運用於函式內的區域性變數。
register 儲存型別用於定義儲存於暫存器中的變數而不是記憶體中。這意味著該變數的最大尺寸將是暫存器的大小(通常是乙個字),並且不能使用 '&' 定址運算子進行操作(因為它沒有記憶體位址)。
register型別應該僅應用於需要快速訪問的變數,比如計數器。需要注意的是,定義 register 型別的變數並不意味著該變數一定就儲存在暫存器中,這僅僅意味著需要按照硬體以及具體實現的限制來判定到底是不是儲存在暫存器中。
static 儲存型別的變數意味著該變數將會從始至終地存活在程式的整個生命週期內,而不會隨著每次訪問到它所在的**塊時就建立該變數,離開**塊時就銷毀該變數。因此,區域性變數靜態化可以使他們在函式呼叫時仍保有其值。
static 修飾符也可以應用於全域性變數。 當全域性變數使用該修飾符後, 該全域性變數就被限制在其宣告的檔案內。
在 c++中,當 static 應用於類的資料成員時,它所起到的作用是多個該類的成員變數都是指的同乙個變數。
#include
// function declaration
void
func
(void)
; static
int count = 10; /* global variable */
main()
return
0; }
// function definition
void
func
( void )
當上述**被編譯後執行,其結果如下:
i is
6and count is
9 i is
7and count is
8 i is
8and count is
7 i is
9and count is
6 i is
10and count is
5 i is
11and count is
4 i is
12and count is
3 i is
13and count is
2 i is
14and count is
1 i is
15and count is
0
extern 儲存型別用於使全域性變數的引用對所有程式檔案可見。如果前面已經定義了乙個變數名,那麼就不能再使用 extern 來宣告同一變數名的變數了。
當你有多個程式檔案且需要定義乙個可以在其他檔案用可以訪問到的變數或函式時,就可以在其他檔案中使用 extern 宣告該變數或函式的引用。
extern 修飾符通常被應用於多個檔案中需要共享相同的全域性變數或函式的情況。乙個例子如下:
第乙個檔案:main.cpp
#include
int count ;
extern
void
write_extern();
main()
第二個檔案:support.cpp
#include
extern
int count;
void
write_extern
(void)
這裡的 extern 關鍵用於宣告count變數已經在其他檔案中定義了。按照下面的方式來編譯:
$g++ main.cpp support.cpp -o write
這樣會生出乙個 write 可執行檔案,執行它並看他的結果:
$./write
5
mutable 修飾符應用於類物件,將會在後續章節中詳細討論。它允許物件的成員可以覆蓋常量。也即是說,mutable 成員可以被const成員函式所修改。 C 儲存型別
儲存型別和作用域 生存期限 鏈結型別有著千絲萬縷的聯絡。儲存型別一共有四種 extern static 為兩個永久儲存型別 auto register 為兩個臨時儲存型別 只有變數才有臨時生存期限 預設的全域性變數和全域性函式為extern儲存型別 顯示的宣告全域性變數和全域性函式使其具有stati...
c高階c儲存型別
對程式中資料儲存空間的抽象。靜態儲存,一直都在,直到程式完蛋 動態,用就申請,搞完就甩了,例如函式形參那個悲慘的傢伙,用完後,就沒有然後了。auto 奧拓,不擺了 register 暗示編譯器要頻繁使用,快,最好放在cpu暫存器中,但也是暗示,給不給也不一定。全域性變數不能暗示。靜態 空鏈結 與動態...
c 變數儲存型別
extern 儲存型別 只宣告而不定義變數,變數的宣告只是告訴編輯器變數的名稱和資料型別 變數的定義是給變數分配儲存區域 優點就是可以在多個檔案裡面共享乙個全域性變數,static 儲存型別 static指的是靜態變數 又叫永續性變數 靜態變數分為兩種,第一種是區域性靜態變數在函式內定義的變數,該變...