变量生存期

视频参考:

https://chuanke.baidu.com/v1326210-129900-334450.html

 

所有变量都占着内存,变量什么时候占着内存,什么时候从内存消失,这叫做变量的生存周期。

按照变量的生存周期分类有:

1、自动变量auto

2、静态变量static

3、寄存器变量register

4、外部变量extern

 auto和static变量是重点

变量作用域

有时候变量还未消亡,你却不能使用它,这就是变量作用域在作怪。

按照变量作用域分局部变量和全局变量。没有什么关键字修饰,只看你在什么地方定义变量。

下面将从变量生存周期和作用域来分析几种不同类变量的特性。

局部变量

定义局部变量的关键字为auto,也叫自动变量。(大发现:平时我们定义的变量都是局部变量)

全局变量

在函数外面定义的变量都是全局变量,不管他用什么关键字修饰。

特点:

1、全局变量的生存期和作用域在从他的定义点开始,一直到本文件的程序结束前,都是有效的,程序结束后消亡,释放内存。

注意:在同一作用域中,如果局部变量与全局变量重名,全局变量将暂时退出幕后,这是只能操作局部变量。

 程序1:局部变量和全部变量

 

 1 /*局部作用域和变量周期演示*/
 2 #include <stdio.h>
 3 int a=1,b=2;                    //全局变量,在函数外面 
 4 void fun(int c,int d)            //局部变量 
 5 {
 6     int a=3,b=4;                //局部变量与全局变量重名,暂时隐瞒全局变量 
 7     auto int e=5;                //自动全局变量,相当于int e=5; 
 8     int f=6;                    //局部变量 
 9     printf("在fun函数中使用局部变量:c=%d\n",c);
10     printf("在fun函数中使用局部变量:e=%d\n",e);
11     printf("在fun函数中只能使用局部变量:a=%d\n",a);
12 }
13 
14 int g=10,h=11;                    //全局变量 
15 main()
16 {
17     int i=12,j=13;                //局部变量 
18     fun(i,h);
19     printf("在main函数中使用全局变量:a=%d\n",a);
20     printf("在main函数中使用全局变量:g=%d\n",g);
21  } 
22  

 

 

静态变量

静态变量在程序执行点离开它的作用域时,它并不消失,它还会死霸那片内存不放,等着你别的函数下次来使用它。

 1 /*静态变量演示*/
 2 #include <stdio.h>
 3 void fun()
 4 {
 5     static int i=0;        //静态局部变量 
 6     int a=0;            //局部变量 
 7     i++;
 8     a++;
 9     printf("i=%d,a=%d\n",i,a);
10  } 
11  
12  main()
13  {
14      /*三次调用函数,在函数中静看静态变量的变化*/
15       fun();
16      fun();
17      fun(); 
18  }

思考:为什么i分别可以加1,a都是等于1???

 

 

 寄存器变量:

寄存器变量不放在内存中,直接放在CPU寄存器中。因为CPU中的寄存器数量有限,所以寄存器变量不能设置太多。

特点就是比普通内存速度快上百倍。

外部变量:如果一个文件要使用其他文件中的全局变量,就要使用extern声明,这样它就可以和其他文件共享此变量。

 

posted @ 2018-01-22 21:32  徐景祥  阅读(1510)  评论(0编辑  收藏  举报