在C语言中,static关键字至少有下列几个作用:
- 函数体内的static变量作用范围为该函数体,不同于auto变量,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值。(
static修饰局部变量时,使得被修饰的变量成为静态变量,存储在静态区。存储在静态区的数据生命周期与程序相同,在main函数之前初始化,在程序退出时销毁。(无论是局部静态还是全局静态)
局部静态变量使得该变量在退出函数后,不会被销毁,因此再次调用该函数时,该变量的值与上次退出函数时值相同。值得注意的是,生命周期并不代表其可以一直被访问,因为变量的访问还受到其作用域的限制。)
- 在模块内的static全局变量可以被模块内的所有函数访问,但是不能被模块外的函数访问。(全局变量本来就存储在静态区,因此static并不能改变其存储位置。但是,static限制了其链接属性。被static修饰的全局变量只能被该包含该定义的文件访问。)
- 在模块内的static的函数只可被这一模块内的函数调用,这个 函数的使用范围被限制在他的模块内。
- 在类中的static的成员变量属于整个类,对类的所有对象只有一份复制。
- 在类中的static成员函数属于整个类所有, 这个函数不接受this指针,因而只能访问类的static成员变量。