有人可以在C语言中准确地解释变量的范围和生命的概念吗?它在C ++中是否有所不同?我对范围和生活感到困惑。
答案 0 :(得分:20)
变量的“范围”是源代码的一个区域,您可以在其中引用该变量。
“Lifetime”是程序执行期间存在的时间。
默认情况下,局部变量的生命周期与其范围相同:
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
的生命周期是从执行开始到执行结束。
答案 1 :(得分:5)
范围是可以访问变量的区域 生命周期是对象保持有效的时间跨度。
一个简单的例子:
#include <iostream.h>
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
的范围和生命周期在主要内部的括号{
}
内。
答案 2 :(得分:0)
变量的范围是在编译时确定的。它是程序中的一个区域,通过该标识符可以访问通过定义定义的同一对象。
对象的生命周期是在运行时通过执行流程定义的功能。即使定义它的变量不在范围内,也可以通过指针访问对象。
void f(char *a) {
*a = 'f';
}
void g(void) {
char aChar = ' ';
f(&aChar);
}
此处变量aChar
(标识符)的范围是g
的主体。在执行g
期间,对象的生命周期扩展为f
的执行。在aChar
中使用标识符 f
将是非法的,编译器会告诉您类似“函数aChar
中的未知的整数f
”。如上所述,使用指向该对象的指针是完全合法的。
答案 3 :(得分:0)
变量的范围是指程序的不同部分可以访问变量的程度。 变量可以声明为:
在一个称为局部变量或内部变量的函数内。
在所有被称为全局变量或外部变量的函数之外,生命周期或“范围”在整个程序运行中都会延伸。
以下是有关带有示例的变量的详细教程:What is variable in C