C 中變數的持續性 鏈結性和作用域詳解

2022-05-04 21:51:18 字數 1188 閱讀 3531

持續性:變數在記憶體中是否存在(即何時分配記憶體,何時釋放記憶體)

自動:程式開始執行相關函式或**塊時被建立,執行完函式或**塊時被釋放

靜態:程式整個執行過程中都存在

動態:new分配時建立,delete時釋放

注意:未被初始化的靜態變數全部被置為0

只能使用常量表示式來初始化靜態變數(包括字面值常量 const常量 enum常量 和sizeof操作符)

作用域:變數是否可見

區域性:(**塊)從宣告位置到定義它的**塊的結尾可見   

全域性: (檔案) 從宣告位置到檔案結尾之間可見

特殊:函式原型作用域:包含引數列表的括號內可用

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

命名空間中宣告的變數作用域是整個命名空間

注意:作用域解析操作符::表示使用全域性版本

鏈結性:變數如何共享

無鏈結性:不能共享(即只在**塊內有效)

內部:只能由同乙個檔案中的函式共享

外部:可在檔案間共享

注意:在其他檔案中使用extern

重新宣告已經定義過的外部變數,使其在其他檔案中可見

原始宣告稱為 定義宣告 ,extern宣告稱為 引用宣告

變數的持續性、鏈結性和作用域可由下表進行判斷

位置

持續性

鏈結性

作用域

函式定義內宣告的變數 (自動變數)(關鍵字auto)

自動無鏈結性

區域性函式定義內,並且使用static宣告

靜態無鏈結性

區域性函式定義外,並且使用static宣告(或const)

靜態內部

全域性函式定義外宣告 (外部變數)

靜態外部

全域性new建立的變數

動態 注意:

外部變數和自動變數同名時、區域性變數與全域性變數同名時:新定義暫時隱藏舊定義

不同檔案間的同名的全域性靜態變數相互覆蓋(自己的隱藏其他檔案的)

靜態區域性變數只進行一次初始化,再次呼叫該函式時不再初始化

暫存器變數:register宣告,放在cpu暫存器中,無記憶體位址,但編譯器不一定會滿足要求

變數儲存持續性 作用域和鏈結性

靜態持續變數3種鏈結性 外部鏈結性 可在其他檔案中訪問 內部鏈結性 只能在當前檔案中訪問 無鏈結性 只能在當前函式或 中訪問 要想建立鏈結性為外部或內部的靜態持續變數,必須在 塊外面宣告它,要建立沒有鏈結性的靜態持續變數,必須在 塊內宣告它。1.單定義規則 變數只能有一次定義,c 提供了兩種變數宣告...

C 變數的儲存持續性 作用域和鏈結性

資料摘自 c primer plus 儲存持續性 1自動儲存持續性 在函式定義中宣告的變數 包括函式引數 的儲存持續性為自動的。它們在程式開始執行其所屬的函式或 塊時被建立,在執行完函式或 塊時,它們使用的記憶體被釋放。2靜態儲存持續性 在函式定義外定義的變數和使用關鍵字static定義的變數的儲存...

儲存持續性 作用域和鏈結性

關於記憶體的知識 c 使用3種 c 11中是4種 不同的方案來儲存資料,這些方案的區別在於資料保留在記憶體中的時間。1.自動變數和棧 自動變數的數目隨函式的開始和結束而增減,因此程式必須在執行時對自動變數進行管理,常用的方法是留出一段記憶體,將其視為棧,以管理動態變數的增減。2.靜態持續變數 和c語...