C語言學習之變數儲存

2021-06-16 04:25:12 字數 2201 閱讀 4910

c語言中對變數的說明包括兩方面的內容:變數型別以及變數的儲存型別。變數型別如:int(整形),char(字元型)是用來說明變數所占用的記憶體空間的大小。變數儲存型別用來說明變數的作用範圍。

c語言的變數儲存類有:自動類、暫存器類、靜態類和外部類。

關鍵字auto加在變數名及其型別前,用來說明它是自動變數。區域性變數是指在函式內部說明的變數(有時也稱為自動變數)。用關鍵字auto進 行說明, 當auto省略時, 所有的非全程變數都被認為是區域性變數, 所以auto實際上 從來不用。 區域性變數在函式呼叫時自動產生, 但不會自動初始化, 隨函式呼叫的結束, 這個變數也就自動消失了, 下次呼叫此函式時再自動產生, 還要再賦值, 退出時又自動消失。

static稱為靜態變數。根據變數的型別可以分為靜態區域性變數和靜態全程變數。

1. 靜態區域性變數

它與區域性變數的區別在於: 在函式退出時, 這個變數始終存在, 但不能被其它

函式使用, 當再次進入該函式時, 將儲存上次的結果。其它與區域性變數一樣。

2. 靜態全程變數

靜態 全程變數就是指只在定義它的原始檔中可見而在其它原始檔中不可見的變數。它與

全程變數的區別是: 全程變數可以再說明為外部變數(extern), 被其它原始檔使用,而靜態全程變數卻不能再被說明為外部的, 即只能被所在的原始檔使用。

extern稱為外部變數。為了使變數除了在定義它的原始檔中可以使用外, 還要 被其它檔案使用。因此, 必須將全程變數通知每乙個程式模組檔案, 此時可用 extern來說明。

暫存器變數to能夠長在執行速度很重要的情況下使用。其思想是告訴編譯程式把該變數放在乙個cpu暫存器中。因為資料在暫存器中操作比在記憶體中快,這樣就提高了程式**的執行速度。暫存器變數的說明是在變數名及型別之前加上關鍵字register。值得注意的是取位址運算子&不能作用於暫存器變數。

file1.c

#include

#include

int reset();

int next();

int last();

int sum(int );

int i=1;

void main()

}file2.c檔案

static int i=10;

int next()

int last()

int sum(int i)

file3.c檔案

extern int i;

reset()

執行結果:

i=1     j=1

next(i)=11

last(i)=10

sum(i+j)=7

i=1     j=2

next(i)=11

last(i)=10

sum(i+j)=10

i=1     j=3

next(i)=11

last(i)=10

sum(i+j)=14

具體分析一下三個檔案中的變數的種類。

在file1.c的開頭宣告i是外部變數,並出示化為1。而在main函式內部,說明了兩個自動變數i和j,這樣在main內部出現的i就是自動量。在file3.c的開頭說明i是外部的,表明它與file1.c定義的i是同乙個變數,所以reset的值返回的就是這個i的當前值1。file2.c檔案已開始就定義了變數i,並宣告為靜態變數,因此它的使用範圍只在當前檔案中使用。然而從函式sum中定義來看,其內部用到的i是形式引數,j是內部靜態變數,它們與以前的i,j都不同。

具體執行過程分析如下:

首先程式經過編譯後聲稱可執行檔案,執行可執行檔案後,函式從main函式體進入,在初始化的過程中得到i為全域性變數,初值為1。進入main函式後首先呼叫函式reset(),進入檔案file3.c,檔案file3.c宣告i為外部變數,所以此時i的值為1,則返回的值為1。函式reset()執行完後返回主函式,繼續執行迴圈體中的程式。迴圈體首先呼叫函式next(),程式進入file2.c檔案,判斷i為靜態變數,所以此時i的值為10,執行next()之後i的值為11,返回值為11,並將11作為i的值。當呼叫last()函式時,判斷i的值為11,執行函式後,i的值變為10,並將10作為i的值。最後執行函式sum(i),此時值的注意的是執行程式時傳遞的是形參,即第一次呼叫時實際計算的值為sum(i+j=2),這樣呼叫函式sum(i)後執行的結果為i=5+2=7,即為執行的結果。依次類推,分別為7,10,14。

通過以上的程式可以理解不同的儲存型別的作用範圍不同,在程式設計中如何靈活的使用各種不同的儲存型別是能夠使程式更靈活

C語言學習之變數

1.整型資料型別 整型資料型別有char short int int和long int,其中short int和long int可以省略int不寫。它們都可加上unsigned和signed構成 無符號和有符號整數,預設不寫是有符號。c標準一般只有限定 short 不長於int,long 不短於in...

C語言學習之變數

1.整型資料型別 整型資料型別有char short int int和long int,其中short int和long int可以省略int不寫。它們都可加上unsigned和signed構成 無符號和有符號整數,預設不寫是有符號。c標準一般只有限定 short 不長於int,long 不短於in...

C語言學習筆記 變數儲存

怎樣確定常量的型別呢?從常量的表示形式既可以判定其型別,舉例來說 只要看到由單撇號括起來的單個字元或轉義字元就是字元常量。也可以在常量的末尾加專用字元,強制指定常量的型別。從變數的作用域 即從空間 的角度來觀察,變數可以分為全域性變數和區域性變數 變數的儲存有兩種不同的方式 靜態儲存方式和動態儲存方...