1. 程式人生 > >C語言儲存類總結

C語言儲存類總結


要理解儲存類,首先要搞清楚如下三個問題:作用域、連結、儲存時期

作用域:描述程式中可以訪問一個識別符號的一個或多個區域。作用域分為:程式碼塊作用域、函式原型作用域、檔案作用域。    (一個檔案內,變數可以被訪問的位置)

對於程式碼塊作用域有一點需要注意,它包括在for迴圈、while迴圈、或If語句所控制的程式碼。

例如

for(int i=0;i<10;i++)
  printf("%d",i);

函式原型作用域從變數定義處一直到原型宣告的末尾。

例如

int mighty(int mouse, double large)
mouse和large的作用域僅限於這個函式原型中。

在所有函式外定義的變數具有檔案作用域,它從定義處到包含該定義的檔案結尾處均可見。

連結:外部連結、內部連結、空連結。(不同檔案內,變數可以被訪問的位置)

具有程式碼塊作用域或函式原型作用域的變數有空連結,意味它們是由程式碼塊或函式原型私有的。

外部連結的變數,可以在一個多檔案程式的任何地方使用,內部連結的可以在一個檔案的任何地方使用。

用static修飾的具有檔案作用域的變數擁有內部連結,沒有static修飾的為外部連結。

儲存時期   (程式執行過程中,變數存在的時間)

靜態儲存時期:在程式執行期間一直存在; 自動儲存時期:具有程式碼塊作用域的變數一般具有自動儲存時期,當程式進入程式碼塊時,為這些變數分配記憶體,退出這個程式碼塊時,分配的記憶體被釋放。

儲存類:根據不同的作用域、連結、儲存時期,C定義5種儲存類:

自動:  自動儲存時期、程式碼塊作用域、空連線    宣告方式:程式碼塊內

暫存器:自動     、    程式碼塊、     空連線    宣告方式:程式碼塊內,使用關鍵字register

具有外部連結的靜態:  靜態儲存時期、檔案作用域、外部連線    宣告方式:所有函式之外

具有內部連結的靜態:  靜態儲存時期、檔案作用域、內部連線    宣告方式:所有函式之外,使用關鍵字static

具有空連結的靜態:  靜態儲存時期、程式碼塊作用域、空連線    宣告方式:程式碼塊內,使用關鍵字static