淺析c語言中的變量(局部變量,外部變量,靜態變量,寄存器變量)[轉]

c語言中變量分爲四類,分別是app

1.auto   自動變量函數

2.static   靜態存貯分配變量(又分爲內部靜態和外部靜態)oop

3.extern  全程變量(用於外部變量說明)spa

4.register  寄存器變量(分配在硬件寄存器中).net

四大類,全部變量必須先說明(定義),後使用。指針

 

下面分別介紹blog

1.自動變量(局部變量)生命週期

局部變量:在一個函數開頭或段開頭處說明的變量,ip

它有幾個特徵,,

a、做用域爲定義它的函數作用域

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

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

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

[plain]  view plain copy print ?
  1. #include <stdio.h>  
  2.   
  3. void print_number (int x, int y)   
  4. {  
  5.          int m,sum;  
  6.          for(m = x;m<y;m++) {  
  7.                  sum +=m;  
  8.         }  
  9.         printf("%d\n",sum);  
  10. }  
  11.   
  12. void main(void)   
  13. {  
  14.      print_number(3,5);  
  15.      print_number(3,5);  
  16. }  
這個程序打印的值均不正確,由於sum未賦初值,形成了打印的數爲隨機數。 咱們把sum賦初值爲0再執行如下,結果就正確了,這個程序說明局部變量必需要先賦初值再使用,另外說明局部變量的生命週期爲函數調用時開始,函數調用完成時消亡。

 

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;
局部變量的初始化每進入函數便初始化一次。
外部或靜態變量僅在編譯時初始化一次。
自動變量或寄存器變量只能顯示初始化,不然將有不肯定的值。
外部數據的說明,若是帶有初始化項,則當成一個定義。
 
在c語言中函數不能嵌套定義,可是變量能夠嵌套定義。

 

int i = 0;

main( )

{

int i = 1;

printf(「i=%d, 」, i);

{

int i = 2;

printf(「i=%d, 」, i);

{

i += 1;

printf(「i=%d, 」, i);

}

printf(「i=%d, 」, i);

}

printf(「i=%d\n 」, i);

}

 

結果:i=1, i=2, i=3, i=3, i=1

相關文章
相關標籤/搜索