static 变量第一次定义之后,函数调用返回,它的内存空间不会回收掉,也就是再次调用函数,它的值是上一次调用时计算的值
去掉之后,这些变量就是普通变量,函数调用返回后就回收了,下次调用重新赋值
另外注意 z 是全局变量,它的作用域是全局的,所以你看到主函数 z 先是 5,后变成 10,那就是 f 函数 内部修改了z。
如果去掉 static ,那主函数的输出不变,
f 函数内的输出,因为 x 不是static的, 两次调用 f函数的 x 的结果相同,都是 4, z 还是原来的结果,第一次是 10,第二次是 15
static 变量,第一次调用函数的时候会成为其初始值,比如
static int x = 2; 第一次调用就是2
之后如果修改,再调用函数,则就和普通变量一样了。
你可以结合你的程序和答案自己体会下。
供参考:
主函数里:
printf("%5d%5d\n", x, z);输出:x是主函数里static int x= 10 ,全局变量 z = 5. 所以输出:10 5
f();被执行,输出:x 是f()函数里static int x = 2; x=x+2 = 4; 全局变量 z=z+5 = 10; 所以输出:4 10
printf("%5d%5d\n", x, z);输出:x仍是主函数里的static int x ,x = 10 没有变化,全局变量z经过上一句f()函数里+5此时z=10;所以输出:10 10
f();被执行,输出:x 是f()函数里的static int,上一次为4 ,x=x+2 = 6, 全局变量 z=10+5 = 15;所以输出:6 15
至此,文章结束,这是本博主的第一篇博客,博主只是个编程小白,有不对的地方可以指出,大家一起交流一起进步!