變數的儲存類

2021-09-29 08:45:50 字數 1672 閱讀 3125

在c++語言中,變數的儲存類共有如下四種:  (1)auto儲存類     (2)static儲存類     (3)extern儲存類  (4)register儲存類

auto儲存類,即自動儲存類。在函式內部定義的變數,如果不指定其儲存類,那麼它就是auto類變數。

void func( )

//a和b都是auto儲存類變數

自動類變數是在動態儲存區中分配儲存單元的,當函式返回時,自動類變數中存放的資料也就消失了。

在變數初始化方面,自動類變數在每呼叫一次函式時都要賦一次初值,且自動類變數的預設初值不確定。

static儲存類,即靜態儲存類。如果某一物件或變數被指定為static儲存類,則在程式執行過程中,此物件或變數總是存在。這樣,即使函式呼叫結束以後,其靜態物件或靜態變數仍不消失,仍然保持其數值。  

在函式內部定義靜態變數時,需要在定義變數的型別說明符的前面加上static關鍵字,在函式外面定義的物件或變數,即使其前面沒有static,也是靜態儲存類;如果在函式外面定義的變數(即全域性變數)其前面加上static,則稱為靜態外部變數,靜態外部變數的作用域僅僅侷限在該變數所定義的檔案中,而在其它檔案中是不能訪問的。 

void test_static( )

void main( )

/*執行結果 :

static=0

static=1

static=2

static=3

*/

靜態儲存類物件或變數是在靜態儲存區中分配儲存單元的,因此在函式呼叫結束時,它的值並不消失。

在變數初始化方面,靜態變數是在編譯過程中賦初值的,且只賦一次初值。

extern儲存類,即外部儲存類。如果在乙個檔案中要引用另乙個檔案中定義的外部變數,則在此檔案中應用extern關鍵字把此變數說明為外部的。

extern int a;     //a為別的檔案中定義的外部變數

void func( )

外部變數的定義和說明:

大型程式為了易於維護和理解,通常需要把程式劃分為多個檔案來儲存,每個檔案都可以單獨編譯,最後再把多個檔案的編譯結果(即目標檔案)連線到一起來生成乙個可執行程式。這種情況下,如果在乙個檔案中需要引用另乙個檔案中的外部變數,就需要利用extern說明。

(1)外部變數的定義

int mydata; //外部變數的定義

void func( )

(2)外部變數的說明

extern int mydata; //外部變數的說明

void main ( )

register儲存類,即暫存器儲存類。為了提高某些自動類變數或函式引數的處理速度,可以在定義這些變數的型別說明符的前面加上register關鍵字,以通知編譯系統為這些變數分配暫存器來存放其值。

void test_r(register int n)

//register int n;可以簡寫為 register n;

實際可用的暫存器數受硬體特性的限制,所以並不是所有暫存器變數都能夠儲存在暫存器中。

能夠說明為暫存器類變數的資料型別是有限制的,一般常用的有char、int、short int和unsigned int等。 

返回區域性變數或臨時變數的位址 變數的儲存型別

按照變數的作用域 即從空間 角度分 可以分為全域性變數和區域性變數。按照變數的生存期 即從時間 角度分 可以分為靜態儲存方式和動態儲存方式。靜態儲存方式 是指在程式執行期間分配固定的儲存空間的方式。動態儲存方式 是在程式執行期間根據按需分配進行動態的分配儲存空間方式。使用者儲存空間可以分為程式區 靜...

C語言學習 變數的儲存類

1.作用域 a.塊作用域 變數的作用範圍在一段 內,函式的形參和內部定義的變數都具有 塊作用域 b.檔案作用域 定義在所有函式之外的變數具有檔案作用域,作用範圍在整個檔案 c.函式原型作用域 在宣告函式時給出的形參具有函式原型作用域,它的作用範圍從宣告開始到宣告結束 d.函式作用域 只針對goto語...

變數的儲存型別

曾巨集安,華清遠見嵌入式學院 講師。我們在程式中會經常定義一些變數來儲存和處理資料。從本質上看,變數代表了一段可操作的記憶體,也可以認為變數是記憶體的符號化表示。當程式中需要使用記憶體時,可以定義某種型別的變數。此時編譯器根據變數的資料型別分配一定大小的記憶體空間。程式就可以通過變數名來訪問對應的記...