注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

hhfighting的博客

以责人之心责己,以恕己之心恕人

 
 
 

日志

 
 
 
 

静态变量  

2009-10-20 17:43:46|  分类: 专业知识 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

静态变量是在堆分配内存,而普通变量是在栈分配内存。

静态变量只能初始化一次,而普通变量可以实现多次初始化;

静态局部变量生存期从程序开始到结束(但不允许在作用域外访问,只能由拥有该变量的函数调用),而普通局部变量离开定义的作用域即释放空间;

静态变量和全局变量一样,在编译阶段即为其分配内存(因此,断点运行时不会看到执行static语句)

#include<iostream>
using namespace std;
static int value = 4;
 void fun1(int i)
 {
 static int value = i;
 
 cout<<value<<"  \n";
 cout<<&value<<endl;
 }
 void fun2(int i)
 {
 static int value = i;

 cout<<value<< " \n";
 cout<<&value<<endl;
 }
 
void fun3(int i)
 {
 static int value = i;
 
 cout<<value<<"  \n";
 cout<<&value<<endl;
 }
 int main()
 {
 fun1(1);
 fun1(2);   //如果将函数fun1中的value定义和赋值分开的话,此处输出的结果将变为2;

                //定义赋值写在一起相当于初始化,静态变量只能初始化一次
 fun2(2);
 fun3(3);
 cout<<value<< " \n";
 cout<<&value<<endl;
 getchar();
 return 0;
 }

最后输出是:
1
00419520
1
00419520
2
00419528
3
00419514
4
00419020

 

上述的程序断点运行时,拿fun1来说,仍然会执行static语句,但只有第一次调用时,会给其初始化,后面调用虽然会执行此语句,但不会再次初始化。如果我们把static语句改为static int value = 10,断点运行时则不会执行该语句,因为在编译阶段已经完成初始化。总结:静态变量初始化为常量时,则在编译阶段完成初始化;若为变量时,则在编译阶段先初始化为默认值,在第一次调用的时候完成初始化。均不会多次初始化。

  评论这张
 
阅读(208)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018