C语言—普通、静态、局部、静态局部变量

【C语言—普通、静态、局部、静态局部变量】1、普通全局变量
在函数外部定义的变量,这个地方num就是一个全局变量
int num=100;int main(){return 0;}
作用范围:全局变量的作用范围是程序的所有地方,用之前需要声明: int nun;声明的时候不用赋值 。
生命周期:程序运行的整个过程,一直存在,直到程序结束 。
注意:定义普通的全局变量的时候,如果不赋初值,它的默认值为0 。
2、静态全局变量
概念:定义全局变量的时候前面用修饰,这个地方num就是一个全局变量
static int num = 10;int main(){return 0;}

C语言—普通、静态、局部、静态局部变量

文章插图
作用范围:限定了静态全局变量的作用范围,只能在它定义的.c源文件中有效 。
生命周期:在程序运行过程中一直存在 。
注意:定义全局变量的时候如果不赋初值,它的值默认为0 。
3、普通局部变量
在函数内部定义的,或者复合语句定义的变量,这个地方的num就是局部变量 。
int main(){int num;}
作用范围:在函数中定义的变量,在函数中有效;在复合语句中定义的,在复合语句中有效 。
生命周期:在函数调用之前,局部变量不占用空间,调用函数的时候才为局部变量开辟空间,函数结束了,局部变量也就释放了 。
C语言—普通、静态、局部、静态局部变量

文章插图
4、静态局部变量
定义局部变量的时候前面加上修饰
作用范围:在他定义的函数或复合语句中有效 。
生命周期:第一次调用函数的时候,开辟空间赋值,函数结束后,不释放,以后再调用函数的时候,就不再为其开辟空间,也不赋初值,用的是以前的那个变量 。
#include void fun(){static int num = 1;//只有第一次调用函数时才会为其分配空间,赋初值num++;printf("%d\r\n",num);}int main(){fun();fun();fun();return 0;}
执行结果如下:
5、注意
在同一作用范围内,不允许变量重名;作用范围不同的可以重名;局部范围内重名的全局变量不起作用(就近原则) 。