static用法小结

static用法小结

ID:37177395

大小:34.51 KB

页数:4页

时间:2019-05-21

static用法小结_第1页
static用法小结_第2页
static用法小结_第3页
static用法小结_第4页
资源描述:

《static用法小结》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、static关键字是C,C++中都存在的关键字,它主要有三种使用方式,其中前两种只指在C语言中使用,第三种在C++中使用(C,C++中具体细微操作不尽相同,本文以C++为准).(1)局部静态变量(2)外部静态变量/函数(3)静态数据成员/成员函数下面就这三种使用方式及注意事项分别说明一、局部静态变量在C/C++中,局部变量按照存储形式可分为三种auto,static,register(谭浩强,第174-175页)与auto类型(普通)局部变量相比,static局部变量有三点不同1.存储空间分配不同au

2、to类型分配在栈上,属于动态存储类别,占动态存储区空间,函数调用结束后自动释放,而static分配在静态存储区,在程序整个运行期间都不释放.两者之间的作用域相同,但生存期不同.2.static局部变量在所处模块在初次运行时进行初始化工作,且只操作一次3.对于局部静态变量,如果不赋初值,编译期会自动赋初值0或空字符,而auto类型的初值是不确定的.(对于C++中的class对象例外,class的对象实例如果不初始化,则会自动调用默认构造函数,不管是否是static类型)特点:static局部变量的”记忆性”与生存期的”全局性”所谓

3、”记忆性”是指在两次函数调用时,在第二次调用进入时,能保持第一次调用退出时的值.示例程序一#includeusingnamespacestd;voidstaticLocalVar(){staticinta=0;//运行期时初始化一次,下次再调用时,不进行初始化工作cout<<"a="<

4、”,记录函数调用的次数(示例程序一)利用生存期的”全局性”,改善”returnapointer/referencetoalocalobject”的问题.Localobject的问题在于退出函数,生存期即结束,.利用static的作用,延长变量的生存期.示例程序二://IPaddresstostringformat//UsedinEthernetFrameandIPHeaderanalysisconstchar*IpToStr(UINT32IpAddr){staticcharstrBuff[16];//static局部变量,用于返

5、回地址有效constunsignedchar*pChIP=(constunsignedchar*)&IpAddr;sprintf(strBuff,"%u.%u.%u.%u",pChIP[0],pChIP[1],pChIP[2],pChIP[3]);returnstrBuff;}注意事项:1.“记忆性”,程序运行很重要的一点就是可重复性,而static变量的”记忆性”破坏了这种可重复性,造成不同时刻至运行的结果可能不同.2.“生存期”全局性和唯一性.普通的local变量的存储空间分配在stack上,因此每次调用函数时,分配的空间都

6、可能不一样,而static具有全局唯一性的特点,每次调用时,都指向同一块内存,这就造成一个很重要的问题----不可重入性!!!这样在多线程程序设计或递归程序设计中,要特别注意这个问题.(不可重入性的例子可以参见(影印版)第103-105页)下面针对示例程序二,分析在多线程情况下的不安全性.(为方便描述,标上行号)①constchar*IpToStr(UINT32IpAddr)②{③staticcharstrBuff[16];//static局部变量,用于返回地址有效④constunsigne

7、dchar*pChIP=(constunsignedchar*)&IpAddr;⑤sprintf(strBuff,"%u.%u.%u.%u",pChIP[0],pChIP[1],pChIP[2],pChIP[3]);⑥returnstrBuff;⑦}假设现在有两个线程A,B运行期间都需要调用IpToStr()函数,将32位的IP地址转换成点分10进制的字符串形式.现A先获得执行机会,执行IpToStr(),传入的参数是0x0B090A0A,顺序执行完应该返回的指针存储区内容是:”10.10.9.11”,现执行到⑥时,失去执行权,

8、调度到B线程执行,B线程传入的参数是0xA8A8A8C0,执行至⑦,静态存储区的内容是192.168.168.168.当再调度到A执行时,从⑥继续执行,由于strBuff的全局唯一性,内容已经被B线程冲掉,此时返回的将是192.168.168.168字符串,不再

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。