《程式設計師面試筆試寶典》第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 陣列類區域性變數,當被部分初始化時,未被初始化部分,值預設...