代码如下:
当第3,第11,第19行的变量a,不使用static变量修饰时,第29,第31中的赋值不会改变a的值。使用static修饰后就可以了,请问这是为什么?谢谢
首先就是你的描述不是很清楚。其次楼上的说法并不准确。
实际上在函数内声明的变量,加 static 与否,改变的主要是:
(1)这个变量的存储位置(static 存储于和全局变量一起的 segment 中,非 static 的变量存储于当前线程的 stack 中),
(2)以及该变量的生命周期(static 是和进程的生命周期相同,而非 static 的生命周期仅在进入该函数期间)。
(3)同时还改变了赋值初始化语句的作用(从你体验到的效果上来讲,static 变量的初始化相当于在进程进入入口点之前仅执行一次,之后调用这个函数,其初始化语句将被无视或者说忽略掉,而非 static 变量在每次调用函数时都会执行,当然为什么会这样或者说其本质到底是什么,需要从编译器级别去解释)。
因此多个函数都声明相同的 static 变量 a 的效果是什么?它们相当于多个(可见性被局限在函数内)的独立的全局变量(彼此独立)。剩下的只是你看到的现象,当你明白其原理和本质,是很容易解释的,就自己体会吧。
看下局部变量和全局变量,你这全部是局部变量,设置了static的只会有一个变量a,建议再看下static的概念