参考链接:https://blog.csdn.net/guotianqing/article/details/79828100
C语言
作用:提高代码的模块化,提高代码的可读性。
- 普通的局部变量:在最开始的时候不会进行初始化,存储在栈空间,使用完毕就会释放。
- 静态局部变量(添加static):编译器自动将其初始化为0。存放在全局数据区,作用域是局部作用域,在定义的函数结束时作用域随之结束。相对普通的变量它存在的时间更长。
- 全局变量:定义在函数体外,存放在全局数据区,作用域是整个文件,添加extern后作用于整个工程。静态全局变量仅对当前文件可见。在全局变量中添加static可以有效的降低文件之间变量的耦合。
- 函数:和全局变量类似,静态函数只能在声明它的文件中可见。但是普通函数在其他的文件中使用不需要添加extern。
测试代码:
#include <iostream>
using namespace std;
void test1_fuc(){
static int num;
num++;
cout << "static num " << num << endl;
}
void test2_fuc(){
int num;
num++;
cout << "num " << num << endl;
}
int main(){
test1_fuc();
test2_fuc();
test1_fuc();
test2_fuc();
test1_fuc();
test2_fuc();
return 0;
}
C++
在c++中有了类的概念,在类内数据成员的声明前加上static关键字,就是类内的静态数据成员。
特点:
- 存放位置:全局数据区
- 在定义时进行内存分配,所以不能在声明中定义。
- 对于多个对象只有一份拷贝。所以多个类可以对一个数据进行操作。(普通变量每个对象都是新的,都有一份拷贝)
- 静态数据成员不属于任何对象,没有类的实例作用域也可见,没有任何对象时,也可以进行操作
- 访问规则和普通成员一样。public, protected, private
- 初始化:<数据类型><类名>::<静态数据成员名>=<值>
- 访问:<类对象名>.<静态数据成员名> 或 <类类型名>::<静态数据成员名>
- 优点:避免全局变量的耦合,可以是私有成员。
- 静态成员函数
特性如下:
- 与静态数据成员类似,静态成员函数属于整个类,而不是某一个对象
- 没有this指针,无法访问属于类对象的非静态数据成员,也无法访问非静态成员函数,只能调用其余的静态成员函数
- 出现在类体外的函数定义不能指定关键字static
非静态成员函数可以任意地访问静态成员函数和静态数据成员