静态变量重新初始化解决方案

时间:2014-08-24 07:24:29

标签: c

静态变量重新初始化:在代码的第二部分中,我将静态变量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

4 个答案:

答案 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