局部静态变量的学习体会

局部静态变量 其实质还是全局变量,只是编译器对其进行了限制,不允许跨文件访问

其作用域为文件作用域,生命期和全局变量一样

若想跨文件访问,可以使用接口函数(本文件内其他可以使用static的函数的函数,称之为接口函数,或内部实现函数)

 

如图所示定义的全局变量和局部静态变量内存存放是比较接近的。在程序运行main()函数之前就已经给全局变量和局部静态变量赋值了

 

 

在函数中使用局部静态变量:不能跨函数使用,只需要初始化一次

 

编译器对局部静态函数做出访问控制,控制在函数控制范围内,仅需初始化一次

如上图观察可得:在test函数中 static int g_nTest2 = 0x87654321;,接着每次调用test函数,其在内存中的值增加1;由此可知,函数中使用局部静态变量只需要初始化一次。

 

 

如图在Sum函数中打印输出g_nTest2的地址,编译报错未定义,故不能跨函数使用。

 

 

如何做出控制访问:即名称粉碎(就是集成了变量名、作用域名和其他相关信息作为一个新的名称)

当其他函数想要访问是同样的方式产生新的名称,而此名称与其不一致,则编译器报错为该名称未定义

 

 

当函数声明void test() 名称粉碎:  _?g_nTest2@?1??test@@YAXXZ@4HA

当函数声明int test()                          _?g_nTest2@?1??test@@YAHXZ@4HA

当函数声明char test()                       _?g_nTest2@?1??test@@YADXZ@4HA

 

以上皆是小弟个人心得体会

转载于:https://www.cnblogs.com/qiuyuwutong/p/8040039.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值