生命周期:
- 一个变量存在的周期
作用域:
- 一个变量可以被引用的范围
作用域 | 生命周期 | 定义方法 | 内存分布 | 注意 | |
---|---|---|---|---|---|
全局变量 | 全局作用域(只需在一个源文件定义,就可作用于所有源文件) | 程序运行期一直存在 | 引用方法:其他文件中要使用必须用 extern 关键字声明,或通过包含头文件的方式 | 全局(静态)存储区 | 如果两个文件中都定义了相同名字的全局变量,则连接出错:变量重定义 |
全局静态变量 | 文件作用域(只在被定义的文件中可见) | 程序运行期一直存在 | static 关键字、const 关键字 | 全局(静态)存储区 | 只要文件不相互包含,两个不同文件变量可同名 |
静态局部变量 | 局部作用域 | 程序运行期一直存在 | 局部作用域中用 static 定义 | 全局(静态)存储区 | 只被初始化一次,多线程中可加锁保护 |
局部变量 | 局部作用域 | 程序运行出局部作用域即被销毁 | 用 auto 指示符定义,也可省略 | 栈区 |