全局变量
① 定义:定义在函数外面的变量。
② 特点:
没有做初始化的全局变量会得到0值,指针会得NULL值;只能用编译时刻已知的值来初始化全局变量;它们的初始化发生在main函数之前;(初始化)
如果函数内部存在与全局变量同名的变量,则全局变量被掩盖。
③ 生存期和作用域:
全局变量与任何函数都无关;
在任何函数内部都可以使用它们。
本地变量(局部变量)
① 定义:函数的每次运行,就产生一个独立的变量空间,在这个空间中的变量,是函数的这次运行所独有的。
② 特点:
本地变量不会被默认初始化;(初始化)
本地变量可以定义在函数或语句的块内;
块内定义了和外面同名的变量会掩盖外面的。
③ 生存期和作用域:
作用在代码块内,直到代码块结束。
静态本地变量
① 定义:在本地变量定义时加上static修饰符就成为静态本地变量;
② 特点:
a. 静态本地变量的初始化只会在第一次进入这个函数时做,以后进入函数时会保持上次离开时的值;(初始化)
b. 当函数离开的时候,静态本地变量会继续存在并保持其值;
c. 静态本地变量实际上是特殊的全局变量,它们位于相同的内存区域。
③ 生存期和作用域:
全局生存期,本地作用域
静态本地变量具有全局的生存期;
函数内的局部作用域,static在这里的意思是局部作用域(本地可访问) 。
返回变量
返回本地变量的地址是危险的;
返回全局变量或静态本地变量的地址是安全的;
返回在函数内malloc的内存是安全的,但是容易造成问题;
最好的做法是返回传入的指针。
tips:
不要使用全局变量来在函数间传递参数和结果;
尽量避免使用全局变量;
使用全局变量和静态本地变量的函数是线程不安全的。