局部静态变量 其实质还是全局变量,只是编译器对其进行了限制,不允许跨文件访问
其作用域为文件作用域,生命期和全局变量一样
若想跨文件访问,可以使用接口函数(本文件内其他可以使用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
以上皆是小弟个人心得体会