易百教程

变量的作用域和生存周期

可以在函数体中的任何位置定义变量,变量仅存在于定义它们的块中。变量在下一个右括号中不再存在。在外部块的开头声明的变量存在于内部块中。

在块结束时声明和销毁时创建的变量称为自动变量。给定变量可见的范围称为变量范围。如果尝试引用其范围之外的变量,则会出现编译时错误。

以下代码片段显示了变量范围:

{
  int a = 0; // 创建一个变量 a
  // 在这里引用变量 a 正常
  // 这里引用变量 b 会引发一个错误 - 因为它尚未创建
  {
      int b = 10;  // 创建一个变量 b
      // 在这里引用变量 a 和变量 b 都没有问题
  } //变量 b 在这里已经销毁了
  // 这里引用变量 b 会引发一个错误 - 因为变量 b 已经销毁了
  // 这里可以引用变量 a ,没有问题。
}

示例代码

#include <stdio.h>

int main(void)
{
    int count1 = 1; // 在外部块声明

    do
    {
        int count2 = 0;  // 在内部块声明
        ++count2;
        printf("count1 = %d     count2 = %d\n", count1, count2);
    } while (++count1 <= 5);

    // count2 不再存在了

    printf("count1 = %d\n", count1);
    system("pause");
    return 0;
}

执行上面示例代码,得到以下结果:

count1 = 1     count2 = 1
count1 = 2     count2 = 1
count1 = 3     count2 = 1
count1 = 4     count2 = 1
count1 = 5     count2 = 1
count1 = 6