c語言static變數初始化

2021-10-10 02:38:37 字數 827 閱讀 5338

《程式設計師面試筆試寶典》第123頁,舉了個例子

#include

void

fun(

int i)

intmain()

書中寫道:程式輸出結果為

0

00

作者原意是想表明static int value=i++;是變數value由於static的修飾,只會定義一次value變數,並且沒有其他對value變數賦值的語句,函式呼叫過程中value的值不變。

將這部分**賦值後進行編譯,會發現編譯錯誤,提示error: initializer element is not constant,就是說沒有用常量對變數進行初始化。static int value=i++;中的i是個臨時變數,只有程式執行時發生了函式呼叫下,棧空間劃出了一片空間給i,這才存在i。而static 修飾的變數,先於區域性變數i存在,存在於靜態儲存區,不在棧空間,編譯的時候找不到i的值,所以報錯。所以實踐才能檢驗真理。

另外乙個有趣的例子,不建議寫出這種程式。

static

int k=3;

intmain

(int argc,

char

* ar**)

結果:編譯通過,輸出為0。以下的例子也是相同的結果。

int

main

(int argc,

char

* ar**)

static成員變數定義初始化

static成員變數不僅可以通過靜態成員函式來改變其值,還可以通過建構函式改變其值。其中靜態的建構函式僅僅能夠改變靜態的成員變數,一般建構函式可以改變靜態成員變數或者其他成員變數。以下是建構函式可以改變靜態成員變數的值的 class atest static a int atest a 0 這裡不能...

c 類中static變數初始化問題

首先static變數只有一次初始化,不管在類中還是在函式中.有這樣乙個函式 void foo 這裡的static int a 3只執行了一次。在main中呼叫foo 兩次,結果為34.將上面的函式改為 void foo 同樣在foo 中呼叫兩次.結果為33 在類中使用非const的static類成員...

c語言變數賦值,初始化

陣列變數為全域性變數,或被部分初始化,均會出現這種情況。c語言中,變數在沒有顯式初始化時,區分變數型別,有如下幾種情況 1 全域性變數,和靜態區域性變數,未初始化時值預設為0.無論是陣列還是變數,都是如此。2 區域性變數,初始值為隨機值。3 陣列類區域性變數,當被部分初始化時,未被初始化部分,值預設...