静态变量重新初始化:在代码的第二部分中,我将静态变量x重新初始化为5.第一个代码的o / p是预期的,但为什么第二部分的o / p是6 6为什么不是6 7
void foo()
{
static int x ;
x++;
printf("%d", x);
}
int main()
{
foo();
foo();
return 0;
}
//output will be 1 2
//But if i re initialize the static variable then why the output is like this:
void foo()
{
static int x ;
x=5;
x++;
printf("%d", x);
}
int main()
{
foo();
foo();
return 0;
}
//output is 66 why not 67
答案 0 :(得分:4)
结果:
x = 5;
x++;
是x
是6.由于您执行此代码两次,因此输出66
。
注意,x = 5;
是一个赋值,而不是初始化。
答案 1 :(得分:1)
输出为6,6,因为每次调用函数时都会将其重新初始化为5。
要初始化一次(并获得6,7),您需要写:
static int x = 5;
此外,第一个代码可能会产生意外结果,因为该变量未初始化且可能包含任何值。
答案 2 :(得分:0)
结果如预期的那样,因为在函数foo()中,
void foo()
{
static int x ;
// what ever be the value of x until this point is retained.
// But what you are trying to do is assign the variable x again to 5, which means
// you are overwriting the previous value of x with 5.
x=5;
x++;
// Since x is always 5 due to overwriting, x++ will always yield "6" no matter what.
printf("%d", x);
}
在这种情况下,关键字静态对输出没有任何影响。
答案 3 :(得分:0)
void foo()
{
static int x ; // point 0
x=5; // point-1
x++; // point -2
printf("%d", x); // point- 3
}
int main()
{
foo(); // exe-1
foo(); // exe-2
return 0;
}
程序执行流程和该点的x值
无论foo()被调用多少次,point-0只会被调用一次。
exe-1 :( point-0)x = 0 - > (point-1)x = 5(已分配) - > (第2点)x = 6
在exe-2之前x = 6 的当前值
exe-2:这次它没有到达0点,它来到第1点,覆盖 x的当前值(即6) )再次5 。因此,在此之后,当涉及到第2点时,x的值从5增加到6,因此它打印6