全局变量
- 定义在函数外面的变量是全局变量
- 全局变量具有全局的生存期和作用域
他们与任何函数无关
任何函数都可以使用
#include<stdio.h>
int f(void);
int A=12;
int main(void)
{
printf("in %s A=%d\n", __func__, A);
f();
printf("agn in %s A=%d\n", __func__, A);
}
int f(vooid)
{
printf("in %s A=%d\n", __func__, A);
A += 2;
printf("agn in %s A=%d\n", __func__, A);
return A;
}
全局变量的初始化
- 没有做初始化的全局变量会得到0值
- 指针会得到NULL值
- 只能用编译时刻已知的值做全局变量
- 他们的初始化发生在main函数之前
静态本地变量
- 在本地变量定义时加上static修饰符就成为静态本地变量
- 当函数离开的时候静态变量会继续存在并保留其值
- 静态本地变量的初始化只会在第一次进入这个函数时做,以后进入函数会保持上次离开时的值
- 静态本地变量实际上就是特殊的全局变量
- 他们位于相同的内存区域;
- 静态本地变量具有全局的生存期,函数内的局部作用域
- static在这里的意思是局部作用域(本地可访问)
返回指针的函数
- 返回本地变量的地址是危险的
- 返回静态变量或全局变量的地址是安全的
- 返回在函数内malloc的内存是安全的,但是容易造成问题
- 最好的做法是返回传入的指针