如果我写这样的话:
#include <iostream>
int main()
{
using namespace std;
{int n;n=5;} cout<<n;
system("pause");
return 0;
}
编译器告诉我n是未声明的。然后我试着让它静止,但是再一次,编译器告诉我它是未声明的。变量declated static是否具有程序范围?如果没有,我该如何在这个程序中使用n?
答案 0 :(得分:9)
你将范围与生命周期混淆。静态变量的生命周期等于程序的生命周期,但它们仍然遵循基于声明它们声明位置的范围规则。
答案 1 :(得分:3)
n的范围恰好在括号之间:
{int n;n=5;}
所以在块之外,你没有变量。
将其设置为静态只是在退出块后使其值保留,以便下次再次进入该块时,可以从上次执行该块时检索它的值,但是它的范围仍然在括号中。
答案 2 :(得分:1)
如何在此程序中使用n?
using namespace std;
int main()
{
int n; // declare n as int
n=5; // assign it a value
cout << n; // display it.
system("pause");
return 0;
}
答案 3 :(得分:1)
在全局范围内声明为static的变量的范围仅限于转换单元。在函数中声明为static的变量的生命周期设置为与程序相同,但在这种情况下不会影响其范围。您必须将cout
放在与声明n
相同的范围内才能使用它。
答案 4 :(得分:1)
这里编译器给出错误n是未声明的,因为这里“ {int n; n = 5;} ”它在大括号中声明。括号告诉我们变量的范围。 当范围结束时,变量将从内存中删除。
对于静态和本地。
静态:变量与全局变量相同,但其值在整个应用程序中保持不变。并且静态变量不能使用 extern 在其他页面上使用。
本地:本地变量存储在堆栈中,当它们超出范围时会被删除。
答案 5 :(得分:0)
请不要在静态变量的作用域和生存期之间混淆。范围表示可以在哪里访问变量。变量的生存期是变量保留在内存中的持续时间。就你而言 x变量的范围在花括号内。 x的寿命将是程序范围。