变量的范围和生命周期

时间:2012-07-12 08:36:48

标签: c

  

可能重复:
  Scope vs life of variable in C

c中变量的范围和生命周期到底有什么区别? 在函数内的块内声明的变量的范围和生命周期是多少?

3 个答案:

答案 0 :(得分:9)

让我们说我们有两个功能:

void foo()
{
    /* Do some stuff */
}

void bar()
{
    int local_bar;

    foo();

    /* Do some more stuff */
}

在函数bar中,变量local_bar的范围都在函数bar内。调用foo时,变量暂时超出范围,即foo内无法使用。但是,变量的生命周期尚未结束,只有在函数bar结束时才会结束。

答案 1 :(得分:1)

这取决于。 Scope表示可以从中访问变量的代码块,lifetime表示从创建到销毁的时间段。

  

在函数内的块内声明的变量的范围和生命周期是什么?

在这种情况下,它们重合:

{
   int x; // begin scope and lifetime
}  // end scope and lifetime

在其他情况下出现差异,例如全局变量。您声明extern int x并在某处定义它。它的生命周期从程序的开始延伸到结束,但它的范围仅在您实际包含声明的文件中。

答案 2 :(得分:0)

变量的生命周期直接且仅与范围相关。当变量的定义超出整体范围(包括层次结构中的所有范围)时,生命周期结束。

如果在切换子范围后变量超出分数,则可以重新切换。所以它的寿命没有结束。否则,如果在切换父范围后变量超出范围,则无法返回。即使在一段时间后切换相同的范围,也会重新定义该变量,并且生命周期将以新的开始。

int main()
{
   int x=1;
   some_operation(0);
   print(x);
   some_operation(1);
}

void some_operation(int param)
{
   int x=5 + param;
   print(x);
}

结果将依次为5,1和6;