C ++中的局部/静态变量范围

时间:2013-03-01 07:14:00

标签: c++ variables static scope

如果我写这样的话:

#include <iostream>

int main()
{
    using namespace std;

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

编译器告诉我n是未声明的。然后我试着让它静止,但是再一次,编译器告诉我它是未声明的。变量declated static是否具有程序范围?如果没有,我该如何在这个程序中使用n?

6 个答案:

答案 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的寿命将是程序范围。