在函数中分配给静态变量与初始化静态变量有什么不同的影响?

What is the different effect of assigning to vs. initialising static variables in a function?

#include <stdio.h> 

int print1(void)    
{    
    static int x= 10;

    x+=5;    
    return x;    
}

int print2(void)     
{    
    static int x;

    x = 10;    
    x+= 5;    
    return x;
}

int main()    
{    
    int x;    
    x = print1();    
    x+= print1();    
    x+= print2();     
    x+= print2();    
    printf("%d", x);    
    return 0;    
}

我的解决方案:

  1. 首先在 print1 语句中,值将增加 5,x 将为 15。
  2. 然后在第二次调用 print1 函数时,它将是 15+5=20,因为它将保持之前的值。
  3. 现在对于函数 print2,它将再次用 10 初始化 x 值,然后将其递增 5。x 的值将为 15。
  4. x 的最后一个语句值将是 15+5=20。
  5. x=15+20+15+20=70

但是答案是65,请指正我哪里错了?我什至在我的编译器中写了它,它给出了输出 65,但是如果像 static int x=10 这样改变 Print2 语句中 x 的位置,它会给出不同的输出?

为什么会这样?

static int x=10;这样的静态变量的初始化在每次程序执行时只发生一次。这不像是正在执行的语句,它是在为程序设置变量的过程中。
每次执行函数都会执行赋值语句x = 10;
这意味着您讨论的两个代码版本是不同的,尤其是对变量值有不同的影响;这反过来解释了不同的输出。