我正在学习全局变量和局部变量,突然在IDE中进行实验时,我注意到了以下内容:

以下程序产生100 500 1000(在三个差异行中)-

# include <iostream>
using namespace std;

int X=100;
void printing ()
{
    cout<<X<<"\n";
    int X=500;
    cout<<X<<"\n";
}
int main ()
{
    int X=1000;
    printing ();

    cout<<X<<"\n";
    return 0;
}


下面的程序产生1000 500 1000(在三个差异行中)-

# include <iostream>
using namespace std;

int X=100;
void printing ()
{
    cout<<X<<"\n";
    int X=500;
    cout<<X<<"\n";
}
int main ()
{
    X=1000;
    printing ();

    cout<<X<<"\n";
    return 0;
}


请注意,在第一个代码中,我写了int X = 1000作为主函数的开头行,在第二个代码中,我写了X = 1000作为开头的行。为什么会产生差异?

最佳答案

在第一个程序中,使用语法X声明另一个变量int X = 1000,该语法隐藏全局变量。由于您的printing()函数没有看到此新变量,因此它将访问全局X并进行打印。

在第二个程序中,您为全局X分配了一个新值,现在您的printing函数可以很高兴地访问它。

有关更多信息,请参见:https://en.wikipedia.org/wiki/Variable_shadowing

09-06 22:34
查看更多