1. 程式人生 > >C語言儲存類別

C語言儲存類別

1.作用域

在C語言中,變數的作用域可以是塊作用域、函式作用域、函式原型作用域或檔案作用域

  • 塊作用域

    塊是指用一堆花括號括起來的程式碼區域,定義在塊中的變數具有塊作用域,塊作用域變數的可見範圍是從定義處到包含該定義的塊的模組結束。

  • 函式作用域

    可見範圍是整個函式。

  • 函式原型作用域

    用於函式原型中的形參名,其作用範圍是從形參定義處到原型宣告結束,這也解釋了為什麼在定義函式的時候可以沒有形參名,只需要有它的型別定義就行。

  • 檔案作用域

    當變數定義在函式的外面時,具有檔案作用域,其作用域是從它的定義處到該定義所在檔案的末尾均可見,另外檔案作用域變數也稱為全域性變數。

    2.儲存期
    C物件的儲存期有靜態儲存期、執行緒儲存期、自動儲存期、動態分配儲存期.

    • 靜態儲存期
      如果變數具有靜態儲存期,那麼它在程式的執行期間一直存在,檔案作用域變數具有靜態儲存期,關鍵字static表明了其連結屬性,而非儲存期,static表示其具有靜態儲存期。
    • 自動儲存期
      塊作用域的變數具有自動儲存期,當程式進入定義這些變數的塊時,為這些變數分配記憶體,當推出這個塊時,釋放剛才為變數分配的記憶體,變長陣列稍有不同,它們的儲存期從宣告處到塊的末尾,而不是從塊的開始到塊的末尾

    塊作用域變數也能具有靜態存出期,只需要在宣告變數的時候,在宣告前加上關鍵字static

3.自動變數

屬於自動儲存類別的變數具有自動儲存週期、塊作用域且無連結,預設情況下,宣告在塊中或函式頭中的任何變數都屬於自動儲存類別,也可以顯式使用關鍵字auto

auto int plox

自動變數不會初始化,必須要顯式的初始化它,否則它的值是任意的。
4. 外部連結的靜態變數
把變數的定義性宣告放在所有函式的外面便建立了外部變數,也可以使用關鍵字extern進行宣告,如果一個原始碼檔案使用的外部變數定義在另一個原始碼檔案中,則必須用extern宣告該變數。
如果沒有顯式的初始化外部變數,它們自動初始化為0,但外部變數只能被初始化一次,且必須在定義該變數時進行。