用來指明變數的儲存位置,即執行該變數在哪一段分配記憶體空間,常見的儲存位置有auto、extern、register、static,在一段執行程式中,可以為變數分配儲存空間的有bss(bss段(bsssegment)通常是指用來存放程式中未初始化的全域性變數的一塊記憶體區域。bss是英文blockstarted by symbol的簡稱。bss段屬於靜態記憶體分配)、資料區(用來存放程式中已初始化的全域性變數的一塊記憶體區域。資料段屬於靜態記憶體分配)、棧區(是使用者存放程式臨時建立的區域性變數)、堆區(堆是用於存放程序執行中被動態分配的記憶體段)。
用來修飾變數的儲存和表現方式。包括long、short、signed、unsigned、void、const、volatile等。
用來指明該變數的儲存大小,即乙個該型別的變數要占用多少記憶體空間。基本資料型別有(char、int、float、指標型別)和由基本資料型別組成的使用者自定義型別(struct、enum、typedef、union)
auto只能用來表示變數的儲存型別,意味自動型別,表示該區域性變數儲存在執行時程序的棧區域,一般而言,對於區域性變數、auto為預設的儲存型別。所以可以省略不寫。注意,區域性變數如果沒有初始化就直接拿來使用,那麼系統會隨機的分配乙個值給它,這是不安全的。auto型別的變數每一次呼叫都會被初始化一次
extern既可以宣告變數也可以標識函式。對於用來宣告變數,extern宣告在當前檔案中引用的定義在其它檔案中的全域性變數。已經初始化的全域性變數被儲存在資料區中,所以宣告其他檔案中的全域性變數將不會在為其分配記憶體空間。
宣告乙個變數和定義乙個變數的區別:
定義乙個變數:告訴編譯器需要為該變數分配多少空間。
宣告乙個變數:告訴編譯器需要使用該變數,但該變數在其他位置被定義。
對於乙個函式,儲存型別僅僅標識函式的作用域,預設的儲存型別是extern。
宣告全域性變數的兩種方式:
1、在標頭檔案中定義,然後引用標頭檔案
2、在其他檔案中定義,然後使用extern引用變數。
register關鍵字只能定義區域性變數,只能修飾整形或者字元型,主要表示長期被使用的變數。被register定義的區域性變數長期存在於暫存器中,暫存器變數被用於迴圈控制是比較理想的。和auto一樣,如果未初始化就直接使用register變數,那麼系統講隨機分配乙個變數。
static既可以標識變數也可以標識函式。被定義為靜態型別的變數(無論是全域性的變數、還是區域性變數)都儲存在資料區域,其生命週期為整個程式。如果是靜態的區域性變數,其作用域為自身所處的內,如果是靜態全域性變數,其作用域為整個當前檔案。
靜態變數如果沒有被初始化,系統講自動初始化為0值,只會被初始化一次。
static定義的函式的作用域只能是當前檔案,因此不能在其他檔案中被呼叫。對於不需要在其他檔案中被呼叫的函式,宣告為static是必要的,這樣也在一定程度上避免函式名稱的衝突。
C C 語言中的變數的4種儲存型別
所有的資料都有兩種型別 1 資料型別 如 int,float 等。2 儲存型別 總共有四種儲存型別的變數,分別為自動變數 auto 靜態變數 static 外部變數 extern 以及暫存器變數 register 1 o auto 函式中所有的非靜態區域性變數。2 register 一般經常被使用的...
C語言中變數的儲存型別
變數的儲存型別 storage class 是指儲存變數值的記憶體型別。有三個地方可以用於儲存變數 普通記憶體 執行時堆疊 硬體暫存器 用於宣告變數儲存型別的關鍵字 auto static register 在所有 塊之外的變數的預設儲存型別是靜態的 static 儲存於靜態記憶體中,稱為靜態 st...
C C 中變數的儲存型別
變數可能存放在三個位置 普通記憶體 靜態儲存區 程式執行堆疊 硬體暫存器。在函式體外定義的和在函式體內定義的並宣告為static型別的儲存在靜態儲存區中,在程式執行之前建立,在程式退出後銷毀。在函式體內定義的預設為 auto 自動變數,儲存在堆疊中,函式返回後,這些變數被銷毀。關鍵字register...