2017-02-21 170 views
-5

enter image description here enter image description here 我有點困惑爲什麼靜態變量的值改變時,我正在做++我嗎?聲明靜態變量時的輸出是什麼?爲什麼?

void hd() 
{ 
int i = 10; 
static int j = 20; 
printf("i=%d j=%d",++i,++j); 
} 

main() 
{ 
hd(); 
hd(); 
} 

輸出 I = 10 J = 21 I = 10 J = 21

爲什麼J更改的值?

+1

因爲你增加了它... –

+0

我記得在Uni中被問到一個非常類似的問題。它在C編程101中。 – StoryTeller

+2

「i = 10 j = 21 i = 10 j = 21」這不是我得到的輸出。 –

回答

0

函數中聲明的變量static僅在第一次執行該行時被初始化。

+0

它應該是11 21 11 22 –

+0

這是錯誤的。所有靜態對象都在調用main之前初始化,而不是在函數的第一次執行時初始化。定義不是「執行」的。 – Olaf

+2

@Olaf - 不要迂腐,但現在你已經將它重新標記爲C++,確實只有在函數的第一個條目中對該對象進行了值初始化纔是正確的。 – StoryTeller

0

提示:除了靜態聲明外,hd()函數中的所有語句都會在每個hd()被調用時執行。

如果這樣做沒有幫助,請使用調試器,並在逐步執行hd()時觀察j的值。

相關問題