面试高频指数:★★★☆☆
- 存储方式:普通全局变量和 static 全局变量都是静态存储方式(编译时分配内存)。
- 作用域:普通全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,普通全局变量在各个源文件中都是有效的;静态全局变量则限制了其作用域,即只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域限于一个源文件(编译模块)内,只能为该源文件内的函数公用,因此可以避免在其他源文件中引起错误。
例如在a.c中定义了static int a=10;
那么在b.c中用extern int a
是拿不到a的值得,a的作用域只在a.c中。
-
初始化:
- 修饰普通变量,修改变量的存储区域和生命周期,使变量存储在静态区,在 main 函数运行前就分配了空间,如果有初始值就用初始值初始化它,如果没有初始值系统用默认值(比如整型的0)初始化它。
- 用static声明局部变量-------局部变量指在代码块 {} 内部定义的变量,只在代码块内部有效(作用域),用static声明局部变量时,则改变变量的存储方式(生命期),使变量成为静态的局部变量,即编译时就为变量分配内存,直到程序退出才释放存储单元。这样,使得该局部变量有记忆功能,可以记忆上次的数据,不过由于仍是局部变量,因而只能在代码块内部使用(作用域不变)。
- 修饰成员变量,在类中,静态成员可以实现多个对象之间的数据共享,并且使用静态数据成员还不会破坏隐藏的原则,即保证了安全性。因此,静态成员是类的所有对象中共享的成员,而不是某个对象的成员。对多个对象来说,静态数据成员只存储一处,供所有对象共用