C語言溫習筆記之變量的存儲類別

1,動態存儲方式與靜態存儲方式

①區別與聯繫
區別:局部變量與全局變量是從作用域的角度對變量類型的劃分,而靜態存儲方式以及動態存儲方式則是從變量存在的時間,即生存期角度對變量類型的劃分。前者從空間的角度入手,後者從時間的角度入手。
聯繫:兩者相互交織,一起結合來刻畫變量的類型。
②定義:
靜態存儲方式:程序運行期間由系統分配固定的存儲空間的方式。
動態存儲方式:程序運行期間根據需要進行動態的分配存儲空間的方式。
③鋪墊
用戶區分爲:程序區、靜態存儲區、動態存儲區。
數據分別存放在靜態存儲區與動態存儲區中。
④大概劃分
全局變量全部存放於靜態存儲區中。
動態存儲區中存放着函數形參(在調用時給形參分配存儲空間)、自動變量(未加static聲明的局部變量)、函數調用時的現場保護與返回地址。
一圖以蔽之:

⑤各自特點
靜態存儲方式:程序開始執行時就在靜態存儲區中分配存儲空間(編譯期間),程序執行完畢就釋放。在程序執行過程中它們佔據固定的存儲單元。
動態存儲方式:在函數調用開始時分配動態存儲空間,函數結束時釋放這些空間。這種分配與釋放在程序執行的過程中是動態的。

2,乾貨

這部分知識就雜了。且聽我娓娓道來:
C語言中,每一個變量與函數有兩個屬性:數據類型(int/long/char/...)與數據的存儲類別。存儲類別是數據在內存中的存儲方式(說白了,在我看來就是把作用域與生存期相互交錯的複雜生態具體化了,通過其存儲類別就能得到其作用域與生存期的狀況)。具體有四種:自動的(auto)、靜態的(static)、寄存器的(register)、外部的(extern)。詳述見圖:

3,其他

變量聲明與定義的異同:
相同點:廣義上說,定義是定義性聲明,聲明是引用性聲明,即,定義和聲明都是聲明,聲明包括了定義。
不同點:狹義上講,定義是需要分配存儲空間的,而聲明不需要分配存儲空間,僅僅是對作用域的改變。
注意點:使用auto/static/register聲明變量時,必須在定義變量的基礎上加上這些關鍵字,不能單獨使用,如:
              static int a; // 正確
              int a; static a; // 錯誤
              只有使用extern可以分開進行聲明,拓展作用域。

4,總結

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章