一个简单的static类型的初始化问题

来源:互联网 发布:淘宝我订购的服务 编辑:程序博客网 时间:2024/05/22 09:07

都知道用static修饰的变量是静态数据,此时变量的地址在静态区存放,因此在函数结束时,该地址中的值不被释放,除非主函数结束。

因此每次访问该地址所指向的变量,都会有上次的值。

但是会出现一个问题:

先看看下边的这个程序:

 

int add(){static int num=1;num++;return num;}void main(){int i;for(i=0;i<3;i++){printf("%d: %d\n",i,add());}}


在每次调用add()函数时,都会首先执行add()中的第一句话,此时,是否每次都会对num进行初始化呢?答案当然是NO;

大神的话:只是在第一次调用add()时,对num进行一次初始化,下次再执行到这句话时,系统会发现已经定义过num这个变量了,就不会对这个变量再进行初始化了。

而下边的这个函数又会是另一种做法:

int add(){int num=1;num++;return num;}void main(){int i;for(i=0;i<3;i++){printf("%d: %d\n",i,add());}}


这个函数在执行过程中,到add()函数中的第一句话时,会定义一个num,并且初始化num,每次调用到add()都会进行同样的过程,定义、初始化。

因为num是一个局部变量,在add()函数结束时,定义的num这个变量会被释放,因此下次再执行到这一步时,发现没有num这个变量,所以会再定义一次,并初始化。

 

 

 

 

原创粉丝点击