C语言关键字static作用详解:
1、隐藏
当同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。
2、static修饰变量能够保持变量内容的持久,static变量的记忆功能和全局生存期
static变量存储在静态存储区,有静态局部变量和静态全局变量,在程序运行期间始终存在。
a) 静态局部变量
静态局部变量在函数内定义,但不像自动变量那样,在作用域范围就存在,退出作用域时就消失。静态局部变量始终存在着,也就是说它的生存期为整个源程序。虽然静态局部变量的生存期为整个源程序,但是其作用域仍与自动变量相同,即只能在定义该变量的函数内使用该变量。退出该函数后,尽管该变量还继续存在,但不能使用它。
b) 静态全局变量
全局变量增加static修饰就构成了静态的全局变量。全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。这两者的区别在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。而静态全局变量则限制了其作用域,即只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它(隐藏)。
3、static第三个作用是默认初始化未0;在静态存储区,内存中所有字节默认值都是0x00
4、static的第四个作用:c++中类成员声明static
a) 类的静态成员函数属于整个类而非类的对象,所以它没有this指针,这就导致了它仅能访问类的静态数据和静态成员函数。
b) 不能将静态成员函数定义为虚函数。
c) 静态数据成员是静态存储的,所以必须对他初始化。
d) 未防止父类的影响,可以在子类中定义一个与父类相同的静态变量,以屏蔽父类的影响。