C++ 中静态变量、自动变量、全局变量和局部变量的区别


这里有两个独立的概念:

  • 作用域,决定名称可以在哪里被访问 - 全局和局部
  • 存储期,决定变量何时创建和销毁 - 静态和自动

作用域

局部变量只能被该函数或代码块内部的语句使用。局部变量对于函数本身来说是未知的。

示例

实时演示

#include <iostream>
using namespace std;

int main () {
   // Local variable declaration:
   int a, b;
   int c;

   // actual initialization
   a = 10;
   b = 20;
   c = a + b;

   cout << c;
   return 0;
}

这将给出以下输出:

输出

30

全局变量定义在所有函数之外,通常位于程序的顶部。全局变量将在程序的整个生命周期内保持其值。任何函数都可以访问全局变量。

示例

实时演示

#include <iostream>
using namespace std;

// Global variable declaration:
int g;

int main () {
   // Local variable declaration:
   int a, b;

   // actual initialization
   a = 10;
   b = 20;
   g = a + b;

   cout << g;
   return 0;
}

这将给出以下输出:

输出

30

存储期

自动变量是局部变量,其生命周期在执行离开其作用域时结束,并在重新进入作用域时重新创建。

示例

for (int i =0 0; i < 5; ++i) {
   int n = 0;
   printf("%d ", ++n); // prints 1 1 1 1 1 - the previous value is lost
}

静态变量的生命周期持续到程序结束。如果它们是局部变量,则它们的值在执行离开其作用域时会保留。

for (int i = 0; i < 5; ++i) {
   static int n = 0;
   printf("%d ", ++n); // prints 1 2 3 4 5 - the value persists
}

请注意,static 关键字除了静态存储期之外还有多种含义。此外,在 C++ 中,auto 关键字不再表示自动存储期;它现在表示自动类型,从变量的初始化程序中推断得出。

更新时间: 2019-07-30

3K+ 次浏览

启动你的 职业生涯

通过完成课程获得认证

开始学习
广告