static in c

来源:互联网 发布:央视网络电视 编辑:程序博客网 时间:2024/06/03 17:04
惨痛教训:

      假设在test.h中定义了一个static bool g_test=false;

      若test1.c和test2.c都包含test.h,则test1.c和test2.c分别生成两份g_test,在test1.c 中置g_test=true,而test2.c中仍然为false并未改变!

  一:全局变量:

              1)内存中的位置:静态存储区(静态存储区在整个程序运行期间都存在)

              2)初始化:未经初始化的全局静态变量会被程序自动初始化为0(自动对象的值是任意的,除非他被显示初始化)

              3)作用域:全局静态变量在声明他的文件之外是不可见的。准确地讲从定义之处开始到文件结尾。

2. 局部静态变量:在局部变量之前加上关键字static,局部变量就被定义成为一个局部静态变量

            1)内存中的位置:静态存储区

            2)初始化:未经初始化的全局静态变量会被程序自动初始化为0(自动对象的值是任意的,除非他被显示初始化)

           3)作用域:作用域仍为局部作用域,当定义它的函数或者语句块结束的时候,作用域随之结束。

注:当static修饰局部变量,局部变量离开作用于时,其仍然在内存中,直到程序结束,只是我们不能访问而已。
原创粉丝点击