C語言中的自動變數和暫存器變數是什莫?深圳

2022-12-27 13:10:49 字數 2430 閱讀 6938

1樓:匿名使用者

c語言學習之變數儲存

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。

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

2樓:聖之使

auto:程式段中的變數,程式段結束後會被**(我的"程式段"指的是""之間,可能術語有用錯)

register:直接儲存於暫存器的變數,暫存器詳細請參考計算機組成原理

c語言中變數定義是什麼,c語言中exit怎麼定義?

型別說明符 變數名稱 賦值表示式。這是基本的。比如 int a 1 2 char b b 定義了一個整數型變數a 其值為1 2就是3,定義了一個字元型變數b,b的值為字元 b 型別說明符變數名稱還可以加修飾說明,比如前面加上const表示這是一個不能修改值得常量等等。變數 是一個能夠存放某個指定型別...

C語言中,怎樣不用中間變數而互換兩個變數的值呢

有兩種方式可以不使用中間變數,交換同型別的變數a,b的值 1 使用加法操作 a b b a b a b 2 使用異或操作 a b b a a b c語言運算子是說明特定操作的符號,它是構造c語言表示式的工具。c語言的運算異常豐富,除了控制語句和輸入輸出以外的幾乎所有的基本操作都為運算子處理。除了常見...

在c語言中怎樣隨機給變數賦值

在c語言 bai中,獲取隨機數的du函式為rand 1 宣告 zhi daoint rand void 2 標頭檔案 stdlib.h 3 功能 獲取一內個隨機數容。4 示例 int a rand 獲取一個隨機數並賦值給a int b rand 100 獲取一個0 99的隨機數,並賦值給b。c語言c...