C 語言變數的儲存類別

2021-08-21 11:08:35 字數 2250 閱讀 9569

儲存類別是變數的屬性之一。在我們定義乙個變數時,其實是有字首的,只是我們通常省略。c++語言有4中變數的儲存類別,分別是auto變數、static變數、register變數、extern變數。不同的變數儲存方式會使變數的生存期不同,生存期表示了變數存在的時間。生存期和變數作用域是從時間和空間這兩個不同的角度來描述變數的特性。在介紹4種變數之前,我們需要搞清楚動態變數和靜態變數是什麼。

靜態儲存變數通常是在變數定義時就分配固定的儲存單元並一直不變,直到整個程式結束。全域性變數就屬於靜態儲存變數,它們被分配在靜態儲存區中。

動態儲存變數是在程式執行過程中使用它時才分配儲存單元,只是在函式被呼叫時才給予分配,呼叫函式完畢後立即釋放,此類變數被分配在動態儲存區中。

總結:靜態變數一直存在,直到程式結束;動態變數時而存在時而消失。

自動變數儲存型別是c++語言程式中預設的儲存型別。宣告定義自動變數時,可以將auto關鍵字省略。

int i;同等於auto int i;

自動變數具有以下特點:

//程式1

//1.自動變數的作用域僅限於定義該變數的個體內。在函式體定義的自動變數,只在該函式內有效,在復合語句中定義的自動變數只在改復合語句中有效;

//2.不加字首的變數,會自動視為auto自動變數;

//3.自動變數屬於自動儲存方式,變數分配的記憶體實在棧中,當函式呼叫結束後,自動變數的值會自動被釋放[注意]。同樣,在復合語句中定義的自動變數,在退出復合語句後也不能再使用,否則會引起錯誤;

//4.由於自動變數的作用域和生存期都侷限與它的個體內(函式或復合語句),因此不同的個體中允許使用同名的變數而不會混淆。[程式2]

#include int main()

int show()//自動變數的作用域僅限於定義該變數的個體內

;

靜態變數屬於靜態儲存方式,它具有以下特點:

//1.靜態變數在函式內定義,在程式結束後釋放。也就是說它的生存期為整個源程式;

//2.與auto自動變數的作用域相同,在函式內定義就在函式內使用。儘管該變數還繼續存在,但不能使用它;

//3.編譯器會為靜態區域性變數初始化為0;

//4.靜態區域性變數的值在函式呼叫結束後不消失,靜態全域性變數只在本原始檔使用。

//使用static變數實現累加

#include #include using namespace std;

int add(int x)

int main()

{ auto int i,j,s;

cin>>i;

cout<<"the result is:"《通常變數的值存放在記憶體中,當對乙個變數反覆讀寫時,需要反覆訪問記憶體儲器,則花費了大量訪問時間。為了提高效率,c++語言可以將變數宣告為暫存器變數,這種變數將區域性變數的值存放在cpu的暫存器中,使用時不需要訪問記憶體,而直接從暫存器中讀寫。register就是暫存器變數

register變數具有以下特點:

//1.暫存器變數屬於動態儲存方式。凡需要採用靜態儲存方式的量不能定義為暫存器變數;

//2.編譯程式會自動決定哪個變數需要儲存器儲存。register起到程式優化的作用;

不會初始化為0。

#include #include using namespace std;

int main()

{ register int a,b,c;

cout《在乙個原始檔中定義的變數和函式只能被本檔案中的函式呼叫,乙個c++語言程式中會有許多原始檔,如果使用非原始檔的全域性變數呢?

c++語言提供了extern關鍵字來解決這個問題。在使用其他原始檔的全域性變數時,只需要在本原始檔中使用extern關鍵字來宣告這個變數即可。

//主程式

最大的特點是能訪問非本原始檔的全域性變數。

#include #include #include "extern_test.h"//呼叫

using namespace std;

extern int a,b;//宣告外部變數,宣告而不定義,且不能包含初值,系統不會為此變數分配記憶體空間

extern char c;//宣告外部變數 ,宣告而不定義,且不能包含初值,系統不會為此變數分配記憶體空間

int main()

{ cout《不同的變數儲存類別會有不同的作用,在程式設計的時候要慎重選擇變數儲存類別。使用正確的變數儲存類別,有時能起到事半功倍的效果。

C語言變數儲存類別

變數除了型別屬性 int char float.外,另外乙個重要屬性就是儲存類別 系統把程式中用到的資料區分為靜態儲存區和動態儲存區。靜態儲存區 在這個區分配了空間的變數,在程式執行過程中一直存在,即相對是不變的。動態儲存區 在這個區分配了空間的變數,可能隨時被釋放,即相對是不斷變化的。c語言提供了...

C語言變數的儲存類別

前面已經介紹了,從變數的作用域 即從空間 角度來分,可以分為全域性變數和區域性變數。從另乙個角度,從變數值存在的作時間 即生存期 角度來分,可以分為 靜態儲存方式 和動態儲存方式。使用者儲存空間可以分為三個部分 程式區 靜態儲存區 動態儲存區。全域性變數全部存放在靜態儲存區,在程式開始執行時給全域性...

c語言 變數的儲存類別

1.動態儲存方式與靜態儲存方式 執行結果 1 函式中的區域性變數 形參 在函式中定義的變數等 如果不專門宣告為static儲存類別,都是動態分配儲存空間的,在函式呼叫時系統給這些變數分配空間,在呼叫結束時系統就自動釋放這些記憶體空間,因此這類區域性變數被稱為自動變數。2 實際上,關鍵字 auto 可...