一个简单的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这个变量,所以会再定义一次,并初始化。
- 一个简单的static类型的初始化问题
- 一个简单的初始化问题
- 初始化一个static 的常量Map
- java中关于static 类型的变量声明与初始化的问题
- PHP的static变量初始化问题
- 关于static代码块的初始化问题:
- 如何初始化C++的static Vector 类型的变量
- static/static const 的初始化
- final与static final变量(原生类型)的初始化方式
- final与static final变量(原生类型)的初始化方式
- static的初始化顺序
- Static 变量的初始化
- static数据的初始化
- static数据的初始化
- 初始化从相同类型的一个对象
- C++中const 、static、 static const和const static的初始化以及修改问题
- 一个比较简单的错误,初始化后花屏。
- 一个简单的EXT表单保存,初始化
- oracle笔记5-练习
- 23种设计模式之命令模式
- 页面浏览pdf
- flex截取字符串
- 23种设计模式之命令模式1
- 一个简单的static类型的初始化问题
- java访问.net webservice返回对象操作
- jsp防止重复提交
- 23种设计模式之命令模式2
- oracle笔记4-简单sql查询
- 求贝赛尔 曲线的长度
- 客户端的IP地址伪造、CDN、反向代理、获取的那些事儿
- 转:Windows Shell 编程 第五章_1
- hdu 3853 概率DP