一、静态变量总的特点
- ①静态的意思是:该变量在内存中的位置不变
- ②加上static之后,static变量在第一次初始化之后就一直存在于第一次初始化的内存中,就算函数或者代码块结束时,static变量依然存在于内存中。只有当程序执行完之后才会释放内存空间
- ③重点:静态全局/局部变量存在于全局数据区
- ④静态局部变量定义时建议要进行初始化。如果未初始化,编译器自动将它初始化为0
- ⑤静态变量只初始化一次,下次执行到相同的static语句时,直接跳过
二、静态局部变量
作用域
- 和普通的局部变量一样,只在函数内有效,函数外部无法访问
生命周期
- 从第一次调用函数初始化时,直到程序结束才销毁,不会随着函数调用结束而销毁
#include <stdio.h> void demo(){ static int a = 0; printf("%d\n", ++a); } int main() { for (int i = 0; i < 10; ++i) demo(); printf("%d\n", ++a); return 0; }
三、静态全局变量
作用域
- 在整个文件中有效,且只在本文件中有用
生命周期
- 程序开始执行到程序执行结束
特点
- 静态全局变量仅对当前文件可见,其他文件不可访问。其他文件可以定义与其同名的变量,两者互不影响
四、静态函数
特点
- 静态函数的特点与静态全局变量一样,只可以在当前的文件中调用,其它的文件不可以调用
五、注意事项
- 不能在函数的参数中使用static变量
int add(static int a); //错误