c語言中的自動變數和暫存器變數是什莫

2021-09-10 07:11:37 字數 3880 閱讀 8959

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

auto稱為自動變數。

區域性變數是指在函式內部說明的變數(有時也稱為自動變數)。用關鍵字auto進

行說明, 當auto省略時, 所有的非全程變數都被認為是區域性變數, 所以auto實際上

從來不用。

區域性變數在函式呼叫時自動產生, 但不會自動初始化, 隨函式呼叫的結束, 這

個變數也就自動消失了, 下次呼叫此函式時再自動產生, 還要再賦值, 退出時又自

動消失。

二、register

register稱為暫存器變數。它只能用於整型和字元型變數。定義符register說

明的變數被turbo c2.0儲存在cpu的暫存器中, 而不是象普通的變數那樣儲存在內

存中, 這樣可以提高運算速度。但是turbo c2.0只允許同時定義兩個暫存器變數,

一旦超過兩個, 編譯程式會自動地將超過限制數目的暫存器變數當作非暫存器變數

來處理。因此, 暫存器變數常用在同一變數名頻繁出現的地方。

另外, 暫存器變數只適用於區域性變數和函式的形式引數, 它屬於auto型變數,

因此, 不能用作全程變數。定義一個整型暫存器變數可寫成:

register int a;

3樓:匿名使用者

1、auto[自動]儲存型別 在**塊之間傳遞資訊的一種方法就是使用外部變數。 當一個變數在函式的外部被宣告時,它的儲存空間是永久分配的, 它的儲存型別是extren. 外部變數的宣告看上去和函式或**塊內部所宣告的變數一樣。

外部變數對於它之後的所有函式都有效。在**塊或函式後, 外部變數仍然存在。

2、register[暫存器] 儲存型別告訴編譯器相關的變數應該改量儲存在高速度的暫存器中。 使用register儲存型別的目的一般是為了提高執行速度, 但是,register宣告只是向編譯器所提出的「建議」, 並非強制要求。

4樓:韌性第一

自動變數就是auto型變數,一般作為區域性變數;

暫存器變數是儲存在cpu內的,所以它的呼叫別自動、靜態變數都快。

c語言中自動變數是什麼變數?它是動態變數的意思嗎?怎麼理解?

5樓:匿名使用者

區域性變數,如不作專門說明為靜態變數,都是動態分配儲存空間,儲存回在動態儲存區中。這答種變數叫自動變數。這種變數只在定義它們的時候才建立,在定義它們的函式返回時系統**變數所佔儲存空間。

對這些變數儲存空間的分配和**是由系統自動完成的,所以也叫自動變數。一般情況下,不作專門說明的區域性變數,均是自動變數。

6樓:

自動變數包括函式形參和非static區域性變數,他也不是說動態變數的意思。自動變數說明這個變數是再棧上在執行時自動建立自動撤銷。

c語言中 自動變數 靜態變數 暫存器變數 外部變數 有可比性嗎?區別在哪?簡單易懂點吧~

c語言遞迴函式中的自動變數是什麼?

7樓:

就是你遞迴回去的那個數,在遞迴找到出口前,一直隨著遞迴次數增加改變

c語言中變數指標輸出問題,C語言中變數指標輸出問題

這和printf用 s的規則相關。首先ps是一個指向字元型資料的指標 printf用 s修飾輸出時需要提供一個指標,這個指標指向的資料是字元型的,但printf將按照字串的規則來進行輸出,也就是輸出完這個指標指向的字元後,自動將指標加1,並判斷指向的字元是否為0,否則將輸出直至指向的資料為0為止,或...

C語言中static變數的賦值問題

static int a 0 執行期時初始化一次,下次再呼叫時,不進行初始化工作如下 printf d a a int main staticlocalvar 第一次呼叫,輸出a 0 staticlocalvar 第二次呼叫,記憶了第一次退出時的值,輸出a 1 return 0 擴充套件資料 1 s...

C語言區域性變數和自動變數的區別是什麼?請簡單舉例子說明一下

常量 在程式執行時,不會被修改的量。變數 在指令式語言中,變數通常是可變的。舉個栗子 抄 我們定義了一bai 個方法來求圓的周長,那麼就要du用到公式c 2 r我們將這zhi個公式看成程式那麼dao r就是變數,每次的輸入都可能是不一樣的。則是常量,不管如何,就是那個值。常量就是在程式編譯完成以後就...