全局变量
- 定义在函数外面的变量是全局变量
- 全局变量具有全局的生存期和作用域
- 它们与任何函数都无关
- 在任何函数内部都可使用它们
int f(viod);
int gAll = 12;
int main(){
printf("in main gAll=%d\n",gAll);
f();
printf("agin in main gAll=%d\n",gAll);
return 0;
}
int f(void){
printf("in f gAll=%d\n",gAll);
gAll +=2;
printf("agin in f gAll=%d\n",gAll);
return gAll;
}
in main gAll=12
in f gAll=12
agin in f gAll=14
agin in main gAll=14
全局变量初始
- 没有初始化的全局变量会得到0值
- 指针会得到NULL值
- 只能用编译时刻已知的值来初始化全局变量
- 它们的初始化发生在main函数之前
#include<stdio.h>
int f(viod);
int gAll;//未初始化,默认为0,指针则默认为NULL
//int gAll =12; //error:initializer element is not a compile-time constant
//int g2 = gAll; //只有在gAll前+ const 才行
int main(){
printf("in main gAll=%d\n",gAll);
f();
printf("agin in main gAll=%d\n",gAll);
return 0;
}
int f(void){
printf("in f gAll=%d\n",gAll);
gAll +=2;
printf("agin in f gAll=%d\n",gAll);
return gAll;
}
in main gAll=0
in f gAll=0
agin in f gAll=2
agin in main gAll=2
被隐藏的全局变量
- 如果函数内部存在与全局变量同名的变量,则全局变量被隐藏
#include<stdio.h>
int f(viod);
int gAll = 12;
int main(){
printf("in main gAll=%d\n",gAll);
f();
printf("agin in main gAll=%d\n",gAll);
return 0;
}
int f(void){
int gAll = 1;//函数里
{
int gAll = 0;//段里
printf("in daun gAll=%d\n",gAll);
gAll +=2;
printf("agin in duan gAll=%d\n",gAll);
}
printf("in f gAll=%d\n",gAll);
gAll +=2;
printf("agin in f gAll=%d\n",gAll);
return gAll;
}
in main gAll=12
in daun gAll=0
agin in duan gAll=2
in f gAll=1
agin in f gAll=3
agin in main gAll=12