天天看點

變量的存儲類别(一)

了解變量是如何儲存的,對我們了解代碼會更深刻點。

編譯後的C程式在記憶體中的存儲空間分别為:程式代碼區,靜态存儲區和動态存儲區。

代碼區就是存放代碼指令的嘛,存儲區則是用來存放資料的。

1.動态存儲區:就是運作到這個過程會單獨給個臨時的存儲機關進行存儲,執行完就釋放,這個臨時存儲機關就沒了,最常見的就是被調函數,臨時開辟空間進行存儲,每次調用都要進行初始化。

如下圖的fun函數:

變量的存儲類别(一)
2.對于靜态儲存區,就是給變量固定的存儲空間,在整個程式運作期間其存儲空間就一直存在,直接上個代碼你就明白了。
變量的存儲類别(一)
這兩結果不是一樣的嘛? 确實是一樣的,由之前對動态存儲區的認識我們很清楚知道結果是如何來的。但是:
變量的存儲類别(一)

static是靜态存儲類别,後面會詳細介紹。(加了static這個fun函數是靜态局部變量,就是裡面的值不會消失,每次調用會繼續用上一次的值)

至于靜态變量,動态變量其實就是在相應存儲方式的變量。

接下來,介紹C語言局部變量的存儲方式:

I.auto:自動存儲類别(動态存儲)

這種類别特别常見,main函數裡面我們寫的int a其實就是 auto int a。

II.static:靜态存儲類别

就是每次執行完他會保留執行後的值,再下一次調用時候直接使用,也就是隻會指派一次初始值,後面就沿用上一次的值。

III.register:寄存器存儲類别

将資料存儲在寄存器内,這個使用比較少,注意就是register隻能在動态局部變量使用,并且由于是将資料存放在寄存器内,我們不能對定義了register的變量進行取位址運算。

忘記說了,資料放入存儲器内運作速度會提高,但是一般寄存器不會特别大...

變量的存儲類别(一)

接下來就是全局變量存儲類别:

全局變量就是作用域從定義的開始到本檔案的末尾為止的變量,一般放在檔案開頭或者函數的前面。

extern:用來擴大外部變量的範圍,比如:

變量的存儲類别(一)
這裡就是extern還有個比較明顯的作用:
變量的存儲類别(一)

調用另外一個檔案内的變量,很nice.(就是在多個檔案中聲明全局變量擴大作用域)

static:是不是有點奇怪,前面不是說static是局部變量嘛?static即可以是局部變量,也可以是全局變量,如果是全局變量,就是放在檔案頭或者函數前面定義變量。

比如 static int x; 

      int main()   ...

​​變量的存儲類别(二)​​

​如有不對,歡迎指正。​

繼續閱讀