C 作用域 自動變數 靜態持續變數彙總

2021-09-28 17:14:13 字數 2061 閱讀 4254

這一部分內容容易忘記、弄混,所以在這裡記錄一下。

1.作用域

作用域描述了名稱在檔案的多大範圍可見。

1)作用域為區域性的變數只能在定義它的**塊中可見,**塊是由花括號括起的一系列語句。

2)作用域為全域性的變數在定位位置到檔案結尾之間都可以用,自動變數(函式定義中宣告的變數,包括函式引數)的作用域為區域性的,靜態變數的作用域可能為全域性可能為區域性,至於什麼是靜態變數在後文中詳解。

3)在函式原型作用域中使用的名稱只在包含引數列表的括號內可用,這也是為什麼這些名稱是什麼以及是否出現不重要。

4)在命名空間中宣告的變數的作用域為整個名稱

5)在類中宣告的成員的作用域為整個類

6)函式的作用域可以是整個類或者命名空間(包括全域性),但不能是區域性的,因為不能再**塊內定義函式。

2.自動變數

自動變數是指那些在函式定義中宣告的變數,包括函式引數,作用域為區域性,沒有鏈結性。

假設有乙個**塊1內部還有乙個**塊2,**塊1中的變數在**塊1和**塊2中均可見,**塊2中的變數只能在**塊2中可見。若**塊1和2中均有一變數weight,執行**塊2中的**時,**塊2中的weight會隱藏**塊1中的變數weight,當程式離開**塊2時,原來的定義又重新可見。

來管理自動變數。

3.靜態變數

靜態變數在整個程式執行期間存在,由於靜態變數的數目在程式的執行期間時不變的,所以編譯器會分配固定的記憶體塊來儲存所有的靜態變數。

.int global =

1000

;static

int file =50;

intmain()

1)外部鏈結性:不僅能在當前檔案中位於外部定義後面的任何函式訪問該變數,還能在其他檔案中訪問該變數,因此這種變數又稱為全域性變數。想要建立外部鏈結性的靜態變數,必須在**塊外宣告它,即不在任何函式內。**中的變數global就是全域性變數。

單定以規則:變數只能有乙個定義。

由於單定義規則的存在,使得在多個檔案中使用外部變數,只需在乙個檔案中包含該變數的定義,但在其他檔案中使用該變數時,必須使用關鍵字 extern 來宣告它,但不進行初始化。但是當在函式內部宣告了乙個與外部變數同名的變數,那麼同名變數將隱藏外部變數

.extern

int global;

intmain()

2)內部鏈結性:只能在當前檔案中訪問,並且必須在**塊外****宣告它,並使用static限定符,如file1.cpp中的變數file。如果檔案定義了乙個靜態外部變數,其名稱與另外乙個檔案中宣告的常規外部變數相同,則靜態變數將隱藏常規外部變數。

3)無鏈結性:只能在當前函式或**塊中訪問。建立無鏈結性的靜態變數必須在**塊內宣告它,並使用static限定符,相比於區域性變數,靜態區域性變數在該**塊不處於活動狀態時仍然存在,因此,在兩次函式呼叫之間,靜態區域性變數的值將保持不變。如果初始化了靜態區域性變數,程式只在啟動時進行一次初始化,之後在呼叫函式時,將不會像自動變數那樣再次被初始化

c 靜態持續變數

c 為靜態儲存持續性變數提供了3種鏈結性 外部鏈結性 可在其他檔案中訪問 內部鏈結性 只能在當前檔案中訪問 無鏈結性 別有用心能在當前函式或 中訪問 如果沒有顯示的初始化靜態變數會把它設定為0 要建立鏈結性為外部的靜態持續變數,必須在 塊外面宣告它 要建立鏈結性為內部的 靜態持續變數,必須在 塊外面...

c 變數作用域

作用域是程式的乙個區域,一般來說有三個地方可以宣告變數 1.在函式或乙個 塊內部宣告的變數,成為區域性變數 2.在函式引數的定義中宣告的變數,稱為形式引數 3.在所有函式外部宣告的變數,成為全域性變數 include using namespace std int x 全域性變數 int main ...

C 變數作用域

作用域是程式的乙個區域,一般來說有三個地方可以定義變數 我們將在後續的章節中學習什麼是函式和引數。本章我們先來講解宣告是區域性變數和全域性變數。在函式或乙個 塊內部宣告的變數,稱為區域性變數。它們只能被函式內部或者 塊內部的語句使用。下面的例項使用了區域性變數 include iostream us...