c中的每乙個變數和函式都有兩個屬性:型別(type)和儲存型別(storage class).儲存型別分別是auto(自動),extern(外部),register(暫存器),static(靜態)
1.auto
在函式體中定義的變數預設是auto.
當進入**塊(block)時,系統為自動變數分配記憶體.在塊內,這些變數被定義,並被認為他們是區域性於本塊的.當退出塊時,系統釋放分配給自動變數的記憶體,因此,變數值就丟失了.重新進入塊,系統會為自動變數再次分配記憶體,原先的值已經沒有了.
2.extern
在函式的外部宣告變數,就為變數永久的分配儲存,它的儲存型別是extern.
定義在函式外部的變數的儲存型別都是extern,既不使用關鍵字extern.
使用extern關鍵字是告訴,編譯器」在本檔案或其他檔案中尋找它」.既a檔案中int a =1
在b檔案中則可以使用extern int a;
來呼叫它.
外部變數從不會消失,因為外部變數在整個程式執行期間都是存在的.
兩種方式向函式傳遞資訊:1.使用外部變數.2.使用引數.當函式從其內部而不是通過參數列改變全域性變數時,會產生***.這樣的構造容易引發錯誤.正確的做法是通過引數和返回機制影響全域性變數.
3.register
register高速編譯器應該把有關的變數儲存在高速的記憶體暫存器中.使用儲存於型別register是要試圖改善執行速度.當關係速度時,可選擇一些最經常訪問的變數,並把他們的儲存型別宣告為register.
register i;
等價於register int i;
,register預設是int型別.
4.static
1.允許區域性變數儲存它的原有值,以便再進入塊時使用.
void f(void)
當第一次呼叫函式時,把變數cnt初始化為0,在退出函式時,cnt的值被儲存在記憶體中.當再次呼叫函式時,就不用再對cnt進行初始化,cnt扔保留著上次呼叫函式時的值.
2.在函式外部宣告static
,則次變數是本檔案可訪問(私有privacy),外部檔案不能訪問.
深入c語言 儲存型別
了解計算機的都知道記憶體有很多種,比如暫存器,記憶體,記憶體中又有很多段,段,資料段,堆疊等等與程式設計相關的,資料段還可以細分,初始化的,未初始化的,唯讀的等等。所以乙個變數,可以在多種地方儲存。變數的儲存型別就是告訴變數儲存在哪些地方的,雖然這麼說不太嚴謹,因為有暫存器型別的導致的,但是可以這麼...
C語言 變數儲存型別
c語言中,變數儲存型別指的是儲存變數的記憶體的型別,主要分為三種 普通記憶體 執行時堆疊 硬體暫存器。變數儲存在那種型別的記憶體中和變數的作用域有很大的關係。首先,分析一下變數的作用域。作用域與宣告的位置有關。在乙個原始檔中,變數宣告的位置有兩種 在 塊內和 塊外。塊指的是被花括號 包圍的一段 1 ...
c語言變數儲存型別
在c語言中變數大致分為四種型別它們分別 1 auto 自動變數 2 register 暫存器變數 3 static 靜態變數 4 extern 外部變數 一般形式 儲存型別說明符 資料型別說明符 變數名,變數名 static int i,j auto char c,d static int a 1 ...