全局变量
- 定义在函数外部的变量是全局变量。
- 全局变量具有全局的生存期和作用域
- 全局变量与任何函数都无关
- 在任何函数内部都可以使用全局变量
- 不能使用变量给全局变量初始化
- 不初始化的全局变量默认为NULL
- 函数内的同名变量会隐藏全局变量
int a = 1;
{
int a = 2;
{
int a = 3;
printf("%d\n",a);
}
}
output: 3;
静态本地变量
-
使用static修饰一个变量变量使其变成静态本地变量
-
静态本地变量可以理解为特殊的全局变量(生存期相同,内存区域相同,作用域不同)
-
静态本地变量具有全局生存期,但作用域为局部作用域
- static的意思是局部作用域(本地可访问)
eg:
#include<stdio.h>
int f(void);
int main(){
f();
f();
return 0;
}
int f(void){
int var = 1;
static int static_var = 1;
var++;
static_var++;
printf("var => %d\nstatic_var => %d\n",var,static_var);
}
output:
var => 2
static_var => 2
var => 2
static_var => 3
返回指针的函数
-
返回函数内本地变量的指针是危险的,离开此函数后,谁也无法保证这片内存空间会不会分配给别人。
-
返回全局或者静态本地变量是安全的,他们和函数无关。
-
返回在函数内malloc的内存是安全的,但是容易出问题,不推荐。
-
返回传入函数的指针是安全的。
尽量避免使用全局变量