本文目錄一覽:
關於c語言auto變量和static變量區別
auto是自動變量,在C語言中編譯器已給不加關鍵字的定義默認為自動變最,即auto,因此在實際中沒必要加。static是靜態變量,即該變量不會改變,任何賦值都無效,有點類似預處理。
C語言中的自動變量和寄存器變量是什莫?
C語言學習之變量存儲
C語言中對變量的說明包括兩方面的內容:變量類型以及變量的存儲類型。變量類型如:int(整形),char(字符型)是用來說明變量所佔用的內存空間的大小。變量存儲類型用來說明變量的作用範圍。
C語言的變量存儲類有:自動類、寄存器類、靜態類和外部類。
關鍵字auto加在變量名及其類型前,用來說明它是自動變量。局部變量是指在函數內部說明的變量(有時也稱為自動變量)。用關鍵字auto進 行說明, 當auto省略時, 所有的非全程變量都被認為是局部變量, 所以auto實際上 從來不用。 局部變量在函數調用時自動產生, 但不會自動初始化, 隨函數調用的結束, 這個變量也就自動消失了, 下次調用此函數時再自動產生, 還要再賦值, 退出時又自動消失。
static稱為靜態變量。根據變量的類型可以分為靜態局部變量和靜態全程變量。
1. 靜態局部變量
它與局部變量的區別在於: 在函數退出時, 這個變量始終存在, 但不能被其它
函數使用, 當再次進入該函數時, 將保存上次的結果。其它與局部變量一樣。
2. 靜態全程變量
靜態 全程變量就是指只在定義它的源文件中可見而在其它源文件中不可見的變量。它與
全程變量的區別是: 全程變量可以再說明為外部變量(extern), 被其它源文件使用,而靜態全程變量卻不能再被說明為外部的, 即只能被所在的源文件使用。
extern稱為外部變量。為了使變量除了在定義它的源文件中可以使用外, 還要 被其它文件使用。因此, 必須將全程變量通知每一個程序模塊文件, 此時可用 extern來說明。
寄存器變量to能夠長在執行速度很重要的情況下使用。其思想是告訴編譯程序把該變量放在一個CPU寄存器中。因為數據在寄存器中操作比在內存中快,這樣就提高了程序代碼的執行速度。寄存器變量的說明是在變量名及類型之前加上關鍵字register。值得注意的是取地址運算符不能作用於寄存器變量。
file1.c
#include stdlib.h
#include stdio.h
int reset();
int next();
int last();
int sum(int );
int i=1;
void main()
{
auto int i,j;
i=reset();
for(j=1;j=3;j++)
{
printf(“i=%d\tj=%d\n”,i,j);
printf(“next(i)=%d\n”,next());
printf(“last(i)=%d\n”,last());
printf(“sum(i+j)=%d\n”,sum(i+j));
}
}
file2.c文件
static int i=10;
int next()
{
return(i+=1);
}
int last()
{
return(i-=1);
}
int sum(int i)
{
static int j=5;
return(i=j+=i);
}
file3.c文件
extern int i;
reset()
{
return(i);
}
運行結果:
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語言的定義變量問題?
auto
(1)auto關鍵字在C語言中只有一個作用,那就是修飾局部變量。
(2)auto修飾局部變量,表示這個局部變量是自動局部變量,自動局部變量分配在棧上。(既然在棧上,說明它如果不初始化那麼值就是隨機的······)
(3)平時定義局部變量時就是定義的auto的,只是省略了auto關鍵字而已。可見,auto的局部變量其實就是默認定義的普通的局部變量。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/182352.html