C中变量的范围与寿命

有人可以在C语言中准确地解释变量的范围和生命的概念吗?它在C ++中是否有所不同? 我在范围和生活之间感到困惑。

范围是可以访问变量的区域。
生命周期是对象保持有效的时间跨度。

一个简单的例子:

#include  void doSomething() { x = 5; //Error! Not Accessible } int main() { int x = 4; std::cout<< x << endl; { int x = 2; cout << x << endl; } doSomething(); std::cout<< x << endl; return 0; } 

以上给出了输出:

4
2
4

在上面的节目中,
变量x = 4生命周期贯穿整个主体,即:它在主体的执行过程中保持活着,也可以在主体内进行访问,即它的范围。 请注意,它在函数中不可访问,因为它超出了变量x的范围。

变量x = 2范围和生命周期在main内部的括号{ }内。

变量的“范围”是源代码的一个区域,您可以在其中引用该变量。

“生命周期”是程序执行期间存在的时间。

默认情况下,局部变量的生命周期与其范围相同:

 void foo() { int x = 123; cout << x << endl; x += 1; } int main(){ foo(); foo(); foo(); } 

这里,每次调用foo都会创建一个新的x (在堆栈上为它保留空间),当执行离开声明x的块时, x被销毁(对于int这意味着保留的空间) ,现在可以重复使用了)。

相反:

 void foo() { static int x = 123; cout << x << endl; x += 1; } int main(){ foo(); foo(); foo(); } 

这里,由于x被声明为static ,因此在程序执行开始之前,会为x保留空间。 x在内存中有一个固定的位置,它是一个静态变量 。 C ++有关于这种变量初始化的特殊规则:它是在执行第一次通过声明时发生的。

因此,在foo的第一次调用中,此x被初始化,输出语句显示123,并且增量将值增加1.在下一次调用中,跳过初始化(已经执行),输出值124,并且值再次递增。 等等。

x的生命周期是从执行开始到执行结束。

变量的范围在编译时确定。 它是程序中的区域, 通过该标识符可以访问通过定义定义的相同对象。

对象的生命周期是在运行时通过执行流程定义的function。 即使定义它的变量不在范围内,也可以通过指针访问对象。

 void f(char *a) { *a = 'f'; } void g(void) { char aChar = ' '; f(&aChar); } 

这里变量aChar (标识符)的范围是g的主体。 在执行g期间, 对象的生命周期扩展到f的执行。 在f使用标识符 aChar是非法的,编译器会告诉你类似“函数f未知的整数aChar ”。 如上所述使用指向该对象的指针是完全合法的。

变量的范围是指程序的不同部分可以访问变量的程度。 变量可以声明为:

  • 在函数内部,称为局部变量或内部变量。

  • 在所有函数之外,称为全局变量或外部变量,生命周期或“范围”扩展到整个程序运行。

下面是关于带有示例的变量的详细教程: C中的变量是什么