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

来源:本站
导读:目前正在解读《一个简单的static类型的初始化问题》的相关信息,《一个简单的static类型的初始化问题》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《一个简单的static类型的初始化问题》的详细说明。
简介:都知道用static修饰的变量是静态数据,此时变量的地址在静态区存放,因此在函数结束时,该地址中的值不被释放,除非主函数结束。因此每次访问该地址所指向的变量,都会有上次的值。但是会出现一个问题......

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

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

但是会出现一个问题:

先看看下边的这个程序:

int add(){      static int num=1;      num++;      return num;  }    void main(){            int i;      for(i=0;i<3;i++){          printf("%d: %dn",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: %dn",i,add());      }  }  

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

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

提醒:《一个简单的static类型的初始化问题》最后刷新时间 2024-03-14 00:58:31,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《一个简单的static类型的初始化问题》该内容的真实性请自行鉴别。