如果我写这样的东西:
#include <iostream>
int main()
{
using namespace std;
{int n;n=5;} cout<<n;
system("pause");
return 0;
}
编译器告诉我 n 未声明。然后我尝试将其设为静态,但编译器再次告诉我它未声明。变量 declad static 没有程序范围吗?如果没有,我如何在这个程序中使用 n ?
您将范围与生命周期混淆了。静态变量的生命周期等于程序的生命周期,但它们仍然遵循基于它们声明位置的范围规则。
n 的范围就在括号之间:
{int n;n=5;}
所以在块之外,你没有 n 变量。
将其设置为静态只会在您退出该块后使其值保留,以便下次再次进入该块时,您可以从上次执行该块时检索它的值,但它的范围仍在括号内。
此处编译器给出错误 n 未声明,因为此处“ {int n;n=5;} ”在大括号中声明。大括号告诉我们变量的范围。当作用域结束时,变量就会从内存中删除。
对于静态和本地。
静态:该变量与全局变量相同,但其值在整个应用程序中保持不变。并且静态变量不能在使用extern的其他页面上使用。
局部:局部变量存储在堆栈中,当它们超出范围时被删除。
在全局范围内声明为静态的变量的范围仅限于翻译单元。在函数中声明为 static 的变量的生命周期设置为与程序的相同,但在这种情况下不影响其范围。您必须放入与声明cout
相同的范围n
才能使用它。
我如何在这个程序中使用 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;
}
请不要混淆静态变量的范围和生命周期。范围意味着您可以在哪里访问变量。变量的生命周期是变量在内存中的持续时间。在您的情况下, x 变量的范围在花括号内。x 的生命周期将是程序范围。