static的一个问题,运行结果和书上说的不一样。

#include
void fun1(static int v) {

printf("%d\n",v);

}
int main(void) {
fun1(50);
fun1(100);

return 0;

}

书上给结果是50 和 50,而运行结果是50 和 100

可能是书上搞错了吧,以实际编译/运行的结果为准。
如果没有 static 时,结果肯定是 50 和 100;但就算是有了 static,传入参数的值是多少,printf 中应该是多少,不会由 static 的影响。

我是一个初学者 不知道对不对 你可以找一些大神来问一下 我认为书上是对的 static内存只分配一次 返回值了之后下次返回的还是上一次的值 我不知道对不对 你再问问其他大神把

如果在 VS2018 中编程,首先会产生一个编译警告:
warning C4042: “v”: 有坏的存储类
然后,运行的结果也确实是:50 和 100.

静态变量,确实如你所说只分配一次内存、且只初始化一次,但后继对静态变量的赋值是有效的。一般静态变量用在函数体中,上述描述是没有问题的。
但如你所说的做为函数的参数,由于调用时会给参数完成一次赋值的过程,所以应该会改变静态变量的值。

书的原题是这样的:
#include
void fun1(int v) {
static int value=v;
}
int main(void) {
fun1(50);
fun1(100);
return 0;
}
没有输出语句,程序的输出应该为多少

没有输出语句,就不会有输出结果的。

你的核书上不一样,你就说书上错了。
#include
void fun1(int v) {
static int value=v;
printf("%d\n",v); // 50 50
}
int main(void) {
fun1(50);
fun1(100);
return 0;
}