static静态变量输入输出问题

img


为什么答案是32呢,这不应该是24么,是因为static是静态变量再次进入之后的值变为4了吗,为什么呀?

第一次调用 fun函数,静态变量 t 变为 3,
第二次调用 fun函数,静态变量 t 一开始的值就为3 而不是2,后面计算变为4
就是说静态变量,不会在函数调用结束被回收,一直存在的

  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/7763392
  • 这篇博客也不错, 你可以看下关于static变量存在周期和函数不可重入的问题
  • 除此之外, 这篇博客: 静态局部变量和静态全程变量static。中的 2.2 静态变量与普通变量 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 静态全局变量有以下特点:

    • (1)静态变量都在全局数据区分配内存,包括后面将要提到的静态局部变量;
    • (2)未经初始化的静态全局变量会被程序自动初始化为0(在函数体内声明的自动变量的值是随机的,除非它被显式初始化,而在函数体外被声明的自动变量也会被初始化为 0);
    • (3)静态全局变量在声明它的整个文件都是可见的,而在文件之外是不可见的。

    优点:静态全局变量不能被其它文件所用;其它文件中可以定义相同名字的变量,不会发生冲突。

    (1)全局变量和全局静态变量的区别

    • 1)全局变量是不显式用 static 修饰的全局变量,全局变量默认是有外部链接性的,作用域是整个工程,在一个文件内定义的全局变量,在另一个文件中,通过 extern 全局变量名的声明,就可以使用全局变量。
    • 2)全局静态变量是显式用 static 修饰的全局变量,作用域是声明此变量所在的文件,其他的文件即使用 extern 声明也不能使用。