变量
全局变量
- 定义在函数外面
- 有着全局的生存期和作用域
- 在任何函数内部都能使用
- 初始化
- 定义之后没有初始化会自动给其赋值为0
- 只能用编译时刻已知的值来初始化全局变量
- 初始化发生在main函数之前
静态本地变量
- 使用static修饰(static int a;)
- 函数离开时,静态本地变量会继续存在并保持其值
- 其初始化只会在第一次进入该函数时进行,以后进入函数会保持上次离开的值
- 具有全局的生存期,函数内部的作用域(static的意思是局部作用域)
- 实际上是特殊的全局变量
- 与全局变量位于相同的内存区域
本地变量
tips:
- 返回本地变量的地址是危险的
- 返回全局变量或者静态本地变量的地址是安全的
- 返回在函数内malloc的内存是安全的,但容易造成问题
- 最好的方法是返回传入的指针
- 不使用全局变量在函数间传递参数和结果
- 尽量避免使用全局变量
- 使用全局变量和静态本地变量的函数是线程不安全的