[toc]

# 从作用域看

# 全局变量

具有全局作用域,如果不包含目标全局变量定义的源文件需要用 extern 关键字再次声明这个全局变量

# 不能在头文件.h 中定义全局变量

如果在头文件中定义全局变量,那么这个变量会被引用数次,导致定义多次,即重复定义

# 局部变量

具有局部作用域,是自动对象 (auto) 函数执行结束,变量及变量所在内存都会被回收.

# 静态全局变量

这个被坑到过 静态全局变量只有文件作用域,即它与全局变量的区别在于如果程序包含多个文件的话,它作用域定义它的文件里,即被 static 关键字修饰过的变量具有文件作用域,这样即使两个不同的源文件都定义了相同名字的静态全局变量, 它们也是不同的

# 静态局部变量

只对自己所在的函数可见从程序开始到程序结束一直存在,只会被初始化一次

# 从分配内存空间看

  • 静态存储区:全局变量,静态局部变量,静态全局变量
  • 栈:局部变量

静态变量通过 static 的方式告诉编译器,他只在变量的作用范围内可见