幾種變數型別及其自動初始化

2021-09-11 17:59:36 字數 1061 閱讀 8707

以外部定義形式定義的變數稱為外部變數(又名全域性變數)與函式類似,外部變數也允許先使用後宣告,或在另乙個原始檔裡定義而在其他檔案裡被使用。

如果需要宣告乙個外部變數,要按照以下形式:

extern

int a;

//int可以是別的型別

這說明a在其他地方被定義(當然需要a真正的有被定義)。

e.g.在函式內寫

static

int m=

0;

引入的必要性:自動變數的上次資料無法儲存,雖然可以借助全域性變數,但是這樣別的函式也可以訪問這個變數(私有的資料),從而會導致程式不太安全。這對變數提出了另一種要求——其存在期是全域性的,但是作用域是區域性的。

e.g.在外部寫

static

int m=

0;

引入的必要性:乙個程式很大的時候,外部變數容易衝突,為了緩解這一問題,c語言提供了一種作用於被限制為源程式檔案的外部變數,定義的時間加上static即可。靜態外部變數能且只能再定義所在的原始檔裡使用。

警告:這與靜態區域性變數完全不同

自動建立和撤銷的變數,c語言稱其為自動變數。(復合語句開始時建立其中定義的變數,執行結束後銷毀其中的變數)

在其存在期裡總代表乙個值,不允許再賦值。

e.g.

const

int num=

10;

e.g.

register

int m=

0;

暫存器是 cpu裡面臨時資料儲存的單元,速度最快但數量最少,是緊缺資源。

register只是優化提示,實際安排還是由編譯器決定。

注意暫存器變數的特點是沒有位址(因為其不在記憶體中)

如果定義外部變數和區域性靜態變數時沒寫初始化部分,系統將自動賦予0。

自動變數如果不提供初始值,系統不做初始化。

變數的自動初始化

變數的初始化分為倆種型別 1.內建型別自動初始化。程式中有乙個資料區,存放已初始化的全域性變數,靜態變數和常量,所以會增加目標檔案的大小。還有乙個未初始化資料區bss 存放未初始化全域性變數,但是在程式開始執行之前,這些資料會被初始化為0或者null。所以bss資料在目標檔案中只佔乙個符號位,編譯器...

變數的自動初始化

1 1 include2 define const 100 3int p1 4int a 2 5 intb 6static intc 7main 8 輸出 const 100 a 0 0 b 0c 0 d 2514932 e 0f 0 1307813 p2 457819009 資料區存放已初始化的全...

各型別變數的自動初始化總結

前幾天給系統寫乙個新功能,被初始化問題搞毛了 乙個結構體裡包含列舉型別的變數,結果由於沒有初始化,搞了一堆隨機數 這個結構體是作為輸入引數放在查詢函式裡的,結果自然查不到。最悲劇的是,在我的windows平台可以成功查到,linux平台有一定機率能查到 如果乙個變數沒有進行初始化,那麼使用它的行為是...