在函数中分配给静态变量与初始化静态变量有什么不同的影响?
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;
}
我的解决方案:
- 首先在 print1 语句中,值将增加 5,x 将为 15。
- 然后在第二次调用 print1 函数时,它将是 15+5=20,因为它将保持之前的值。
- 现在对于函数 print2,它将再次用 10 初始化 x 值,然后将其递增 5。x 的值将为 15。
- x 的最后一个语句值将是 15+5=20。
- x=15+20+15+20=70
但是答案是65,请指正我哪里错了?我什至在我的编译器中写了它,它给出了输出 65,但是如果像 static int x=10 这样改变 Print2 语句中 x 的位置,它会给出不同的输出?
为什么会这样?
像static int x=10;
这样的静态变量的初始化在每次程序执行时只发生一次。这不像是正在执行的语句,它是在为程序设置变量的过程中。
每次执行函数都会执行赋值语句x = 10;
。
这意味着您讨论的两个代码版本是不同的,尤其是对变量值有不同的影响;这反过来解释了不同的输出。
#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;
}
我的解决方案:
- 首先在 print1 语句中,值将增加 5,x 将为 15。
- 然后在第二次调用 print1 函数时,它将是 15+5=20,因为它将保持之前的值。
- 现在对于函数 print2,它将再次用 10 初始化 x 值,然后将其递增 5。x 的值将为 15。
- x 的最后一个语句值将是 15+5=20。
- x=15+20+15+20=70
但是答案是65,请指正我哪里错了?我什至在我的编译器中写了它,它给出了输出 65,但是如果像 static int x=10 这样改变 Print2 语句中 x 的位置,它会给出不同的输出?
为什么会这样?
像static int x=10;
这样的静态变量的初始化在每次程序执行时只发生一次。这不像是正在执行的语句,它是在为程序设置变量的过程中。
每次执行函数都会执行赋值语句x = 10;
。
这意味着您讨论的两个代码版本是不同的,尤其是对变量值有不同的影响;这反过来解释了不同的输出。