1、普通全局变量
在函数外部定义的变量,这个地方num就是一个全局变量
int num=100;
int main()
{
return 0;
}
作用范围:全局变量的作用范围是程序的所有地方,用之前需要声明:extern int nun;声明的时候不用赋值。
生命周期:程序运行的整个过程,一直存在,直到程序结束。
注意:定义普通的全局变量的时候,如果不赋初值,它的默认值为0。
2、静态全局变量 static
概念:定义全局变量的时候前面用static修饰,这个地方num就是一个全局变量
static int num = 10;
int main()
{
return 0;
}
作用范围:static限定了静态全局变量的作用范围,只能在它定义的.c源文件中有效。
生命周期:在程序运行过程中一直存在。
注意:定义全局变量的时候如果不赋初值,它的值默认为0。
3、普通局部变量
在函数内部定义的,或者复合语句定义的变量,这个地方的num就是局部变量。
int main()
{
int num;
}
作用范围:在函数中定义的变量,在函数中有效;在复合语句中定义的,在复合语句中有效。
生命周期:在函数调用之前,局部变量不占用空间,调用函数的时候才为局部变量开辟空间,函数结束了,局部变量也就释放了。
4、静态局部变量
定义局部变量的时候前面加上static修饰
作用范围:在他定义的函数或复合语句中有效。
生命周期:第一次调用函数的时候,开辟空间赋值,函数结束后,不释放,以后再调用函数的时候,就不再为其开辟空间,也不赋初值,用的是以前的那个变量。
#include <stdio.h>
void fun(){
static int num = 1;//只有第一次调用函数时才会为其分配空间,赋初值
num++;
printf("%d\r\n",num);
}
int main(){
fun();
fun();
fun();
return 0;
}
执行结果如下:
5、注意
在同一作用范围内,不允许变量重名;作用范围不同的可以重名;局部范围内重名的全局变量不起作用(就近原则)。