2017-02-21 11 views
-5

enter image description here enter image description here 静的変数の値が私が++ iをしているときになぜ値が混乱するのですか?静的変数を宣言するときの出力は何ですか?なぜですか?

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の値を確認してください。

関連する問題