变量。静态局部变量只在第一次访问时初始化一次,以后访问时它的值保持和上一次操作结束时一样。Рstatic修饰全局变量(函数),则该变量(函数)成为静态全局变量(函数)。静态全局变量(函数)只能在该文件范围内使用,不能被其他文件所使用。这是因为静态全局变量(函数)的连接属性为内连接,这样可以解决不同源文件内全局变量(函数)名称重名冲突问题。Р深度解析:РC语言中有存储类、作用域、生命周期和连接属性等四个概念。存储类用来描述变量、函数等在内存中分配相关的属性(比如全局变量分配在数据区,而普通局部变量分配在栈上,静态局部变量分配在数据区),作用域描述变量可以被引用的范围(譬如全局变量有文件作用域,而局部变量只有代码块作用域),生命周期表述一个变量何时产生何时消亡(如局部变量在进入代码块时产生,代码块执行结束时消亡),连接属性描述一个变量或函数在连接阶段可以被连接的范围(C语言中全局变量和函数默认为外连接,因此同一工程中不同源文件之中的全局变量或函数不能重名,否则会引起链接时错误。用static修饰全局变量或函数形成静态全局变量或函数,则将其连接属性修改为内连接,此时该全局变量或函数名称只在本文件内有效,因此可以避免连接时重名问题)。Р这四个属性分别从四个角度去描述一个符号(变量或函数都是符号)所处的状态,并且四个属性之间互相影响,互为因果。这里我不打算用枯燥晦涩的概念来跟大家布道(这个世界永远不缺专家教授,这样的书到处都能找到)。按照我一贯的风格,我会讲一些示例,我们要讲的道理就在这些示例中,大家在心里默默体会吸收即可。Р示例1:全局变量可以在文件内(有些书也写作模块内,这里的模块其实就是指这个全局变量所在的.c源文件,因此我喜欢称文件内。概念不重要,大家能明白我想说的是什么才是关键。)任何地方被访问,而局部变量只能在定义它的代码块内被访问。造成这个事实的主要原因就是:全局变量的