1. 程式人生 > >c語言中的變數(區域性變數,外部變數,靜態變數,暫存器變數) .

c語言中的變數(區域性變數,外部變數,靜態變數,暫存器變數) .

c語言中變數分為四類,分別是

1.auto   自動變數

2.static   靜態存貯分配變數(又分為內部靜態和外部靜態)

3.extern  外部變數/全程變數(用於外部變數說明)

4.register  暫存器變數(分配在硬體暫存器中)

四大類,所有變數必須先說明(定義),後使用。

下面分別介紹

1.自動變數(區域性變數)

區域性變數:在一個函式開頭或段開頭處說明的變數,

它有幾個特徵,,

a、作用域為定義它的函式

b、編譯器不會對自動變數給予隱含的初值,故其值不確定,因此每次使用前必須明確的置初值。

c、形參是自動變數,作用域僅限於相應函式內

d、自動變數隨函式的引用而存在和消失,由一次呼叫到下一次呼叫之間不保持值。

2.外部變數:在函式外部定義的變數即為外部變數,它的作用域是整個程式(全程變數)。

a.    c程式可以分別放在幾個檔案上,每個檔案可以作為一個編譯單位分別進行編譯。外部變數只需在某個檔案上定義一次,其它檔案若要引用此變數時,應用extern加以說明(外部變數定義時不必加extern關鍵字)。

b.   在同一檔案中,若前面的函式要引用後面定義的外部(在函式之外)變數時,在函式里加extern加以說明。

引進外部變數的原因:解決函式單獨編譯的協調;與變數初始化有關;外部變數的值是永久的;解決資料共享;
注意:函式本身也被認為是外部變數

3.靜態變數:分為內部靜態變數和外部靜態變數

內部靜態變數:a.在區域性變數前加上static就為內部靜態變數

b.靜態區域性變數仍是區域性變數,其作用域仍在定義它的函式範圍內,但它採用靜態存貯分配(由編譯程式在編譯時分配,而一般的自動變數和函式形參均採用動態存貯分配,即在執行時分配空間),當函式執行完,返回呼叫點時,該變數並不撤銷,再次呼叫時,其值將繼續存在。

外部靜態變數:a.在函式外部定義的變數前加static即為外部靜態變數

b.作用域為定義它的檔案,即成為該檔案的私有變數,其他檔案上的函式一律不得直接訪問,除非通過它所在檔案上的函式進行操作,這可實現資料隱          藏。

4.暫存器變數:只有自動(區域性)變數和函式引數才能進一步指定為暫存器存貯類

a.使用register變數可以提高存取速度,但暫存器變數的數目依賴於具體機器,宣告多了也只有前幾個有效。

b.只限於int,char,short ,unsigned和指標型別用寄存類。

c.不能對register變數取地址(即&操作)



變數的初始化:

外部變數和靜態變數由編譯程式給予隱含的初始值0;
自動變數或暫存器變數只能顯示初始化,否則將有不確定的值。
外部或靜態變數僅在編譯時初始化一次。
區域性變數的初始化每進入函式便初始化一次。
外部資料的說明,如果帶有初始化項,則當成一個定義