2017-02-21 126 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的值。

相关问题