局部静态变量的学习体会

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

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

若想跨文件访问,可以使用接口函数(本文件内其他可以使用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

 

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

posted on 2017-12-14 21:20  秋雨丶梧桐  阅读(180)  评论(0编辑  收藏  举报

导航