一、在C语言中,static主要定义全局静态变量、局部静态变量和静态函数。
1.定义全局静态变量:在全局变量前加上关键字 static,特点:
a.在全局数据区分配内存。
b.如果没有初始化,其默认值为0.
c.作用域:文件作用域(只在被定义的文件中可见。)生成的符号为local符号,而编译器编译链接时只会看到global符号
d.生命周期:程序运行期一直存在
注意:只要文件不相互包含,在两个不同的文件中是可以定义两个相同的静态变量的,他们是完全不同的变量。
2.局部静态变量:在局部变量前加上关键字 static,特点:
a.在全局数据区分配内存。
b.如果不显示初始化,那么隐式初始化为0。
c.作用域:局部作用域(只在局部作用域中可见)
d.生命周期:程序运行期一直存在
注意:只被初始化一次,多线程中需加锁保护
3.静态函数:在函数前面加上关键字 static,特点:
a.静态函数只能在本源文件中使用。
b.在文件作用域中声明的inline函数默认为static。
二、在c++语言中,新增了两种作用:定义静态数据成员和静态函数成员
1.定义静态数据成员:
a.在全局数据区分配内存。
b.静态数据成员定义时要分配空间,故不能在类声明中定义。
2.静态成员函数:
a.静态成员函数与类相联系,不与类的对象相联系
b.静态成员函数不能访问非静态数据成员。
注意:静态成员函数和静态数据成员都没有 this 指针。