C語言中變數的儲存型別

2021-07-04 02:59:00 字數 912 閱讀 3603

變數的儲存型別(storage class)是指儲存變數值的記憶體型別。

有三個地方可以用於儲存變數:普通記憶體、執行時堆疊、硬體暫存器

用於宣告變數儲存型別的關鍵字:auto static register 

在所有**塊之外的變數的預設儲存型別是靜態的(static),儲存於靜態記憶體中,稱為靜態(static)變數。靜態變數在程式執行前建立,在程式的整個執行期間始終存在。

在**塊內部宣告的變數的預設值是自動的(automatic),儲存於堆疊中,稱為自動變數(auto)。程式執行到**塊時,自動變數才建立,程式的執行流離開**塊時,這些自動變數便自行銷毀。

值得注意的是,宣告乙個變數,若是靜態的變數便會初始化為0,而如若是自動變數,則不會被初始化,也無法確定它們的值

static關鍵字可以使**塊內部宣告的變數從自動變為靜態,在程式執行過程中一直存在,但是變數的作用域不便。

函式的形式引數不能宣告為靜態,因為實參總是在堆疊中傳遞給函式,用於支援遞迴。

最後關鍵字register可以用於自動變數的宣告,提示它們儲存於機器硬體暫存器而不是記憶體中,即係暫存器變數。與其他儲存型別的變數不同的是,暫存器變數的訪問效率高,尤其是頻繁執行簡介訪問操作的指標。

編譯器不一定理睬register關鍵字,如果有太多變數宣告為register,編譯器選取前幾個實際儲存於暫存器中,其餘的按普通自動變數來處理。

暫存器變數的建立和銷毀時間和自動變數相同。

許多的機器硬體實現中,並不為暫存器指定位址。

#include #include void do_it()

int main()

這裡三次輸出a的值都為1;而輸出b的值分別為1,2,3

在初次呼叫函式do_it()時,變數a,b被建立,呼叫完畢,a自行銷毀,而b為靜態變數,程式結束後仍保持原來的值。

c語言中的儲存型別

auto 自動型別 在定義變數的時候,變數前預設就是auto auto int a 等於 int a 非自動型別的變數 1.全域性變數 2.static修飾的變數 register 暫存器型別的變數 register int a 暫存器型別的變數,要不普通的變數執行效率要高。在乙個soc syste...

C語言中變數儲存型別和生存週期

本博文基於vc 6.0開發,除錯,執行 內容來自譚浩強的 c語言程式設計 總結 資料型別 浮點型,整型,字元型等都是乙個資料型別 資料儲存型別 資料在記憶體中的儲存方式 這是本博文要討論的重點 注意 資料型別和資料儲存型別都是針對於宣告或定義的函式和變數而言的 靜態儲存型別 變數或函式,在程式執行期...

從記憶體理解c語言中變數的儲存型別

今晚看了一下linux程式設計,看到了程序管理這一塊,講解了c語言中的各種變數的儲存型別,而且是從程序 記憶體的角度講解的,以前從沒有這樣理解過,覺得挺有用的,在這裡記錄下來。首先要來理解一下可執行檔案載入進記憶體後形成的程序在記憶體中的結構,如下圖 區 存放cpu執行的機器指令,區是可共享,並且是...