C 變數的儲存類別與作用域

2022-09-17 12:30:16 字數 2598 閱讀 2243

總結一下c++中變數的儲存類別以及變數的作用域

(1)標示符的儲存類別決定了標示符在記憶體中存在的時間(我們可以理解標示符就是確定乙個變數的符號,也就是我們所說的變數名)

二:儲存類別

(1)靜態儲存類別:靜態存數類別變數(我們簡稱靜態變數),從程式的開始處就存在,其生命期伴隨整個程式。

(2)自動儲存類別:當變數時自動儲存類別時,變數在進入到定義它們的程式快時定義它,在離開它們所在的程式塊(作用域)時銷毀它,因此成為自動變數。其中關鍵字auto和register用來宣告自動型別的變數,

三:自動儲存型別

(1) 只有在函式中的區域性變數才是自動儲存型別的,我們在main函式中定義的變數一般都是自動變數,關鍵字auto可以不寫,預設情況區域性變數就是自動變數(我們把自動儲存類別的變數叫自動變數)如下圖:

int a;

int b; 

都是自動變數

(2)自動變數還有一種暫存器變數,既使用關鍵字register,我們把經常被呼叫的變數宣告為暫存器變數,顧名思義,讓變數存在於暫存器中,達到更加快速的儲存,這個我們了解即可,現在很多編譯器帶有可以識別頻繁使用變數的功能,不需要程式設計師手動設定。

根據最小特權原則,我們應該定義自動變數。**應該只被賦予它僅能完成設計任務的許可權,無需更多許可權。

四:靜態儲存類別

(1)關鍵字extern和static用於靜態儲存類別的變數,靜態存數類別變數(我們簡稱靜態變數),從程式的開始處就存在,其生命期伴隨整個程式,一直存在程式的執行過程,但是:即便是靜態變數,也並不意味著這些變數(專業來說叫:識別符號),在整個程式都是能用的(或者說是可以訪問的),這一點在下面有專門的例項。

(2)對於靜態變數,許多被誤認為和全域性變數一致,這一點是錯誤的,static變數僅僅在變數的作用範圍內可見,而全域性變數是在所有地方都可見的,這就是static變數與全域性變數的區別,我們要糾正一點:儲存類別(存數型別)和變數的作用域是兩個獨立的問題。

我們應該遵循最小特權原則,不去使用全域性變數。

(3)我們解釋一下,全域性變數和靜態變數的區別:全域性變數是不顯示用static修飾的全域性變數,但全域性變數預設是靜態的,作用域是整個工程,在乙個檔案內定義的全域性變數,在另乙個檔案中,通過extern 全域性變數名的宣告,就可以使用全域性變數。

全域性靜態變數是顯示用static修飾的全域性變數,作用域是所在的檔案,其他的檔案即使用extern宣告也不能使用。

五:識別符號(變數)的作用域

(1)程式中可以使用識別符號的範圍成為識別符號 的作用域,其中我們稱識別符號為變數,更加專業。例如:我們在乙個語句塊中宣告了乙個區域性的變數,那麼只能在該語句塊中使用該變數。

(2)其中作用域大致分為四個:

l  全域性作用域:此變數對於從其宣告處到檔案結束,都是已知的。

l  區域性作用域:乙個語句塊中宣告的變數,其作用域在於該語句塊中。

l  函式原型作用域:就是函式的形參列表中。

這裡著重標記一下區域性作用域:當語句塊是巢狀的,並且外層語句塊中的乙個識別符號和內層語句塊中的識別符號名字一致時,外層語句塊中的識別符號被隱藏,直到內層語句塊結束。

六 注意:

(1)我們應該避免使用全域性變數,使用全域性變數可能在不需要訪問變數時卻錯誤的訪問變數,違反最小特權原則。僅用於特定函式中的變數應該宣告為那個函式的區域性變數,而不是全域性變數。

(2)應該避免使用會隱藏在外部作用域中名稱的變數名,這可以通過在程式中避免使用相同的識別符號。

上述總結說明了變數的型別以及作用域,此時我們舉個程式,列舉上述出現的情況。如下:

#includeusing namespace std;

void use_global(); //宣告函式

void use_local();

void use_static_local();

int a=1; //在函式外定義乙個全域性的變數

int main()

cout<

use_local(); //使用函式,函式中定義乙個區域性變數

use_static_local(); //使用函式,函式中定義乙個靜態區域性變數

use_global(); //使用函式,函式中使用全域性變數

C 變數的儲存類別

上一節已介紹了變數的一種屬性 作用域,作用域是從空間的角度來分析的,分為全域性變數和區域性變數 變數還有另一種屬性 儲存期 storage duration,也稱生命期 儲存期是指變數在記憶體中的存在期間 這是從變數值存在的時間角度來分析的 儲存期可以分為靜態儲存期 static storage d...

第八章 變數的作用域和儲存類別

主要問題 變數的作用域和生存週期 8.2變數的儲存類別 8.3 函式的儲存分類 定義 給變數分配確定的儲存單元 說明 說明變數的性質,並不是分配確定的儲存單元 c語言中變數按作用域範圍分為 區域性變數和全域性變數。區域性變數 在乙個函式內部或復合語句內部定義的變數。作用域 定義該變數的函式內或定義該...

變數儲存型別 作用域

auto 作用域和壽命 只能做區域性變數 在函式內或復合語句內定義的自動變數可以省略auto,而在外部定義的無auto的變數顯然不是自動變數 外部變數,即 全域性變數 的壽命和作用域是全域性的 register 作用域和壽命 同auto,即 區域性可見 分配通用暫存器的條件 1 有空閒的暫存器 2 ...