c中变量的范围和生命周期到底有什么区别? 在函数内的块内声明的变量的范围和生命周期是多少?
答案 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;