作用域

猜猜a的printf每次输出的是什么?
答案是
88
99
10
为什么呢?
我们明明定义了全局变量,结果在test()函数里没有用全局变量,而是用的局部变量的值
因为如果⼀个量在全局定义,⼜在局部定义了,那么这个量依照局部优先原则,先使⽤局部定义,然后再使⽤全局定义,但是注意局部变量会销毁,所以在别的函数⾥使⽤的依旧是全局变量(没有在局部定义这个量的情况下)

而变量b为什么会报错呢?因为它只是在while的代码块内定义了,那么它的作用域就在while的代码块之内,不能在外面进行使用
生命周期

在这一串的代码中
全局a的生命周期是全程
而局部的a的生命周期则是函数结束
b的生命周期则是while循环结束
那么s1呢?
它的生命周期也是全程
因为我们使用了static修饰它,使它变为了静态的变量,那么我们第二次调用时,它依旧保留有上次的值,所以第二次打印是2.
程序运行的结果:

浙公网安备 33010602011771号