变量的作用域与生命周期

变量的作用域与生命周期

  1. 局部变量

    1. 普通

      仅在作用域有效,每次调用包含该局部变量的函数时,该变量会被重新初始化。

      例如:

      void func()
      {
          int a = 1;
          ++a;
          printf("a = %d\n",a);
      }
      int main()
      {
          func();
          func();
      }
      

      两次调用func()a的值都为2,生命周期随函数的结束而结束。

    2. 静态staic

      仅在作用域有效,每次调用包含该局部变量的函数时,该变量不会被重新初始化,而是接着上一次的值运行下去。

      例如:

      void func()
      {
          static int a = 1;
          ++a;
          printf("a = %d\n",a);
      }
      int main()
      {
          func();
          func();
      }
      

      第一次调用func()a的值为2,第二次调用后为3,生命周期随程序的结束而结束。

    注:局部变量不赋初值其值为随机值

  2. 全局变量

    1. 普通

      作用域跨文件,不会被重新初始化,在上次值得基础上改变值。

      跨文件使用时需用extern声明。

      例如:

      a.c

      int a = 1;
      

      main.c

      extern int a;
      int main()
      {
          a++;
          printf("a = %d\n",a);
          return 0;
      }
      

      a 的最终值为2;

    2. 静态static

      作用域限定在其所在的文件内。

      例如:

      a.c

      static int a = 1;
      

      main.c

      extern int a;
      int main()
      {
          a++;
          printf("a = %d\n",a);
          return 0;
      }
      //err
      

      报错:a 未定义,发生链接错误。因为静态全局变量无法跨文件使用。

      注:局部变量不赋初值其值为 0

上一篇:Markdown数学公式


下一篇:python学习之路:十一.函数