6

如果我写这样的东西:

#include <iostream>

int main()
{
    using namespace std;

    {int n;n=5;} cout<<n;
    system("pause");
    return 0;
}

编译器告诉我 n 未声明。然后我尝试将其设为静态,但编译器再次告诉我它未声明。变量 declad static 没有程序范围吗?如果没有,我如何在这个程序中使用 n ?

4

6 回答 6

18

您将范围与生命周期混淆了。静态变量的生命周期等于程序的生命周期,但它们仍然遵循基于它们声明位置的范围规则。

于 2013-03-01T07:16:52.017 回答
6

n 的范围就在括号之间:

{int n;n=5;}

所以在块之外,你没有 n 变量。

将其设置为静态只会在您退出该块后使其值保留,以便下次再次进入该块时,您可以从上次执行该块时检索它的值,但它的范围仍在括号内。

于 2013-03-01T07:24:58.440 回答
1

此处编译器给出错误 n 未声明,因为此处“ {int n;n=5;}在大括号中声明。大括号告诉我们变量的范围。当作用域结束时,变量就会从内存中删除

对于静态和本地。

静态:该变量与全局变量相同,但其值在整个应用程序中保持不变。并且静态变量不能在使用extern的其他页面上使用。

局部:局部变量存储在堆栈中,当它们超出范围时被删除。

于 2013-03-01T11:56:59.340 回答
1

在全局范围内声明为静态的变量的范围仅限于翻译单元。在函数中声明为 static 的变量的生命周期设置为与程序的相同,但在这种情况下不影响其范围。您必须放入与声明cout相同的范围n才能使用它。

于 2013-03-01T07:18:06.857 回答
0

我如何在这个程序中使用 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;
}
于 2013-03-01T07:17:04.037 回答
0

请不要混淆静态变量的范围和生命周期。范围意味着您可以在哪里访问变量。变量的生命周期是变量在内存中的持续时间。在您的情况下, x 变量的范围在花括号内。x 的生命周期将是程序范围。

于 2020-07-11T05:46:25.483 回答