天天看點

《C程式設計 》譚浩強 變量的存儲方式和生命周期

這是對譚浩強版 變量 存儲 和生命周期的總結

主要知識點有如下:

1.變量分為:

全局變量、局部變量

按照作用域的角度:可以這樣劃分這兩種變量:

  • 局部變量:
    • 自動變量 Auto (就是最普通的我們用的局部變量 )
    • 靜态局部變量 )
    • 寄存器變量 (register關鍵字,存儲位置在CPU中 友善程式使用的時候 不必反複在記憶體中調入調出,但是現在編譯器已經很智能了,可以自己檢測到,就會把它們放在CPU中 程式設計人員一般不必自己定義)
  • 全局變量
    • 靜态外部變量 (關鍵字 static ,寫法與靜态局部變量相同,但是出現的位置不同,以及用法不同)
    • 外部變量(extern 關鍵字的,允許其他檔案引用)

2.記憶體中供使用者使用的存儲空間分為:

  • 程式區
  • 靜态存儲區
  • 動态存儲區

    資料主要是放在了靜态存儲區和動态存儲區(這裡按照變量值的存放位置來分類)

    那麼靜态存儲區和動态存儲區各自放了哪些東西呢:

    • 靜态存儲區:
      • 靜态局部變量(函數内有效)
      • 靜态外部變量 (本檔案内有效)
      • 外部變量
  • 動态存儲區
    • 自動變量
    • 形參!!感覺知道這個知識點對于了解 後面的指針有幫助
  • 剛剛提到的寄存器變量,它是動态存儲的,但是位置卻不是記憶體中的動态存儲區,而是CPU中

3、那麼從變量的時間(生存期)來區分的話(就是動态存儲還是靜态存儲)也可以對變量進行分類,主要是掌握生存期這個知識點:

  • 靜态存儲:是程式整個運作時間都存在
    • 即 靜态局部變量、靜态外部變量、外部變量
  • 動态存儲是調用函數時臨時配置設定記憶體單元
    • 即 自動變量、寄存器變量、形參

4.補充點:靜态局部變量與靜态外部變量的異同:

  • 我自己的了解
    • 同:它倆在定義的時候是一樣的,按照變量的生存期都是靜态存儲的方式;
    • 異:出現的位置不一樣,靜态局部變量是在函數體中的,這一點見名知意。
      • 靜态局部變量在使用的時候,隻給它賦一次初值 ,以後再改變的時候每次變的那個值都會保留在記憶體中,對于階乘等運算十分便利;
      • 靜态外部變量的出現,就是告訴作業系統,隻有本檔案可以使用這個變量,防止别的檔案誤用。
  • 并不是因為加了static 才使這兩個變量存放在記憶體中的靜态存儲區的。對于全局變量來說,都是在編譯時配置設定記憶體的,都存放在靜态存儲區。
  • 聲明存儲類型是變量作用域的擴充問題。

繼續閱讀