首先,變數的儲存型別可分為四類:自動型別(auto),暫存器型別(register),靜態型別(static),外部型別(extern)
動態變數: 自動型別(auto) 暫存器型別(register)
靜態變數 :靜態型別(static) 外部型別(extern)
屬於動態全域性變數,可以省略auto識別符號,因此,我們所使用的區域性變數都是自動型別的變數
屬於動態區域性變數,暫存器的訪問速度比記憶體快。
因為計算機中暫存器的個數是有限的,而且暫存器的位數也是有限的,所以在使用register說明變數時注意以下幾點:
(1)暫存器型別的變數不能過多,一般把使用頻繁的變數放在暫存器中。
(2)變數的長度應該和暫存器的長度相同,一般為int或者char型別
(3)現在的編譯器能夠識別使用比較頻繁的變數,並且能夠不需要程式設計人員做出暫存器儲存型別定義的情況下,就把這些變數放在暫存器中,所以暫存器變數的定義一般是不需要的
靜態型別可分為靜態區域性變數和靜態全域性變數,靜態型別有預設值,int 為0,float為0.0,char為』\0』。
1>靜態區域性變數也是區域性變數,特點:(1)它的生存期是在橫隔程式的執行期間(2)其作用域僅在定義它的函式內。
(3)靜態區域性變數賦初值是在編譯階段,並且只被賦值一次
#include
long
fac(
int n)
intmain()
printf
("\n");
}
2>靜態全域性變數
如果我們的程式只在乙個檔案中,那麼靜態全域性變數和全域性變數沒有任何區別;如果程式由多個檔案組成,那麼兩者是完全不同的
靜態全域性變數只被它所在的檔案獨享
特點:(1)作用域為定義它的檔案(2)生存期為整個程式執行時期(3)使用靜態全域性變數的好處是可以在兩個不同的原始檔程式中可以使用相同名稱的變數
例如:file1原始檔程式如下:
#include
static
int n;
//定義乙個靜態全域性變數,只在file1檔案內有效
voidf(
int t)
file2原始檔**如下:
#include
int n;
//定義乙個全域性變數
voidf(
int)
;void
main()
#include
extern
int a;
//定義外部變數,使用file2的a
extern
intsum
(int x)
;//定義外部型別函式,使用file2檔案的函式
void
main()
file2原始檔**如下:
int a=20;
intsum
(int x)
return y;
}
靜態變數與動態變數
1 靜態儲存變數通常是在變數定義時就分定儲存單元並一直保持不變,直至整個程式結束。靜態變數,全域性動態變數都是靜態儲存 2 動態儲存變數是在程式執行過程中,使用它時才分配儲存單元,使用完畢立即釋放 3 靜態儲存變數是一直存在的,而動態儲存變數則時而存在時而消失。通常把由於變數儲存方式不同而產生的特性...
靜態變數與動態變數
1 靜態儲存變數通常是在變數定義時就分定儲存單元並一直保持不變,直至整個程式結束。靜態變數,全域性動態變數都是靜態儲存 2 動態儲存變數是在程式執行過程中,使用它時才分配儲存單元,使用完畢立即釋放 3 靜態儲存變數是一直存在的,而動態儲存變數則時而存在時而消失。通常把由於變數儲存方式不同而產生的特性...
靜態變數和非靜態變數
class string1 a和b編譯報錯,can not make a static referrence to no static filed s3,s4 分析 string s1 pingguo string s2 xiangjiao string s3 new string lizi str...