C語言 變數儲存型別

2021-08-19 09:15:20 字數 1691 閱讀 6175

c語言中,變數儲存型別指的是儲存變數的記憶體的型別,主要分為三種:普通記憶體執行時堆疊硬體暫存器

變數儲存在那種型別的記憶體中和變數的作用域有很大的關係。

首先,分析一下變數的作用域。作用域與宣告的位置有關。在乙個原始檔中,變數宣告的位置有兩種:在**塊內和**塊外。**塊指的是被花括號{}包圍的一段**。

(1)**塊外宣告的變數都被稱為靜態變數,這些變數儲存在靜態記憶體中,不在執行時堆疊中。這些變數的作用域為:從宣告位置起一直到原始檔結束,存在於序執行的整個生命週期內,程式執行結束,靜態變數才會被銷毀。

(2)**塊內宣告的變數被稱為臨時變數,預設儲存型別是auto,存在於執行時堆疊中。當**塊執行結束,這些變數就會被銷毀。當乙個函式被多次呼叫時,這些變數會被重新建立,但是變數所佔據的記憶體位置可能與原來的位置不同,即使相同,這些新建立的變數也不是之前的變數。

如果給**塊內部宣告的變數加上乙個關鍵字static,那麼它的儲存型別就從auto變為static靜態的,儲存位置就會從執行時堆疊變到靜態記憶體區域。但是這個變數的作用域仍然是**塊內部,只是當**塊執行完成之後還會儲存在靜態記憶體中,依然不能被**塊外部訪問。

初始化

靜態變數只會在宣告的時候初始化一次,之後便不在初始化,而由於程式在鏈結的時候還無法判斷自動變數的儲存位置,因此只有當被呼叫時才會被初始化。

例子如下:

#include void test();

int c = 0;

int main()

getchar();

return 0;

}void test()

執行結果:

in test a = 0

in test b = 0

in main c = 0

--------------------

in test a = 1

in test b = 0

in main c = 1

--------------------

in test a = 2

in test b = 0

in main c = 2

--------------------

in test a = 3

in test b = 0

in main c = 3

--------------------

結果分析:

**塊外宣告int c,為static 靜態變數,儲存於靜態記憶體,程式執行時一直都在

**塊內宣告static int a, 為static 靜態變數,儲存於靜態記憶體,程式執行時一直都在

**塊內宣告int b,為auto型別的臨時變數,儲存於執行時堆疊,test()執行完成之後被銷毀

a,b,c初始化為0,當執行完一次for迴圈之後,a,b,c都變為1。不同的是test執行完一次之後就被銷毀,因此b不存在了,而a和c儲存在靜態區域中,仍然存在;執行第二次for迴圈,b重新建立,為0;a,c不再被初始化,為1。所以列印出

in test a = 1

in test b = 0

in main c = 1

下面的for迴圈,每次b都被重新建立,所以值一直是0,而a,c不會,所以值會每次加1。

c語言變數儲存型別

在c語言中變數大致分為四種型別它們分別 1 auto 自動變數 2 register 暫存器變數 3 static 靜態變數 4 extern 外部變數 一般形式 儲存型別說明符 資料型別說明符 變數名,變數名 static int i,j auto char c,d static int a 1 ...

C語言的變數儲存型別

c語言中對變數的說明包括兩方面的內容 變數型別以及變數的儲存型別。變數型別如 int 整形 char 字元型 是用來說明變數所占用的記憶體空間的大小。變數儲存型別用來說明變數的作用範圍。c語言的變數儲存型別有 自動類 暫存器類 靜態類和外部類。區域性變數是指在函式內部說明的變數 有時也稱為自動變數 ...

c語言 變數儲存型別 extern

extern表示是外部函式或外部變數函式在使用外部變數之前,必須要知道外部變數的名字。需要在使用的外部變數前加extern。在原始檔中,外部變數在函式之前,可以省略extern關鍵字。如果程式包含在多個原始檔中,而某個變數在file1檔案中定義 在file2和file3檔案中使用,那麼在檔案file...