全局变量
1定义在函数外面的变量是全局变量;
2具有全局的作用域和生存期;
3与函数无关,任何函数内部都可用。
全局变量初始化
1不初始化默认为0,指针为NULL;
2只能用编译时刻已知的值初始化;
3存在与全局变量同名的本地变量时,全局变量会被隐藏。
(小范围变量会使大范围同名变量隐藏)
#include<stdio.h>
int f(void);
情况1:int all1 = 6;//ok
情况2:int all1 = 6; int all2 = all1;//eror
情况3:int all1 = f(); int all2 = all1;//error
情况4:const int all1 = 1; int all2 = all1;
//ok,但不建议全局变量之间初始化有关联,顺序变化就会出错,无法保证编译顺序
静态本地变量
1本地变量定义时加static,即为静态本地变量;
2函数离开时,静态本地变量依然存在,并保存其值;
3初始化只会在第一次进入这个函数做;
4静态本地变量实际上是特殊的全局变量,它们位于相同的内存空间;
5全局的生存期和函数内部的局部的作用域。
static int a = 1;
返回指针的函数
1返回本地变量的地址是危险的;
2返回全局变量或静态本地变量的地址是安全的;
3最好的做法是返回传入的指针。
建议
1最好不要用全局变量在函数间传递参数和结果。
2尽量避免使用全局变量。
3使用全局变量和静态本地变量的函数是线程不安全的