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;
自動變數或暫存器變數只能顯示初始化,否則將有不確定的值。
外部或靜態變數僅在編譯時初始化一次。
區域性變數的初始化每進入函式便初始化一次。
外部資料的說明,如果帶有初始化項,則當成一個定義