[toc]
# 从作用域看
# 全局变量
具有全局作用域,如果不包含目标全局变量定义的源文件需要用 extern
关键字再次声明这个全局变量
# 不能在头文件.h 中定义全局变量
如果在头文件中定义全局变量,那么这个变量会被引用数次,导致定义多次,即重复定义
# 局部变量
具有局部作用域,是自动对象 (auto) 函数执行结束,变量及变量所在内存都会被回收.
# 静态全局变量
这个被坑到过 静态全局变量只有文件作用域,即它与全局变量的区别在于如果程序包含多个文件的话,它作用域定义它的文件里,即被
static
关键字修饰过的变量具有文件作用域,这样即使两个不同的源文件都定义了相同名字的静态全局变量, 它们也是不同的
# 静态局部变量
只对自己所在的函数可见从程序开始到程序结束一直存在,只会被初始化一次
# 从分配内存空间看
- 静态存储区:全局变量,静态局部变量,静态全局变量
- 栈:局部变量
静态变量通过 static 的方式告诉编译器,他只在变量的作用范围内可见