繁体   English   中英

C ++全局和局部变量

[英]C++ global and local variables

我遇到了以下代码:

#include<iostream>
using namespace std;
int i = 1;
int main(int argc,char ** argv)
{
    int i = i;
    cout<<i<<endl; // which i?
    return 0;
}

它可以通过编译,但是给出错误的答案,这怎么解释?

int i = i; main()语句声明了一个隐藏全局变量的局部变量。

它使用自身(具有不确定的值)进行初始化。 因此, i根本就不使用全局。

Local变量是可访问的,类似于呼叫两个具有相同名称的人,一个在房间内,一个在房间外。 您正在尝试访问的范围内的人听到了它。

最内部作用域中的变量将覆盖具有相同名称的变量,而不会发出警告。

较深作用域中的变量将覆盖较高作用域中具有相同名称的变量。 要访问全局变量,请在名称前加上::

int main()
{
    int i=i;
    return 0;
}

是正确的。

因此,在您的程序中,当遇到局部i并将其初始化为自身时,将忽略全局i 结果,您将获得一个垃圾值。

当您有两个同名变量时,一个是全局变量,另一个是局部变量。 然后,在这种情况下,局部变量将仅在该特定范围内使用。 全局变量未使用。

现在,解决您的问题

#include<iostream>
using namespace std;
int i = 1;//Global Variable decleration
int main(int argc,char ** argv)
{
    int i = i; // Local to main
    cout<<i<<endl; // which i?
    return 0;
}

int i = i; 编译时没有任何错误,但是当您运行该程序时,它将产生错误,因为local i值不确定。

在C ++中,如果您有一个具有相同名称的局部变量,但必须使用范围解析运算符:: ,则可以访问全局变量::

换行:

int i = i;

int i = ::i;

该程序将编译并运行

大多数答案所描述的概念称为阴影

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM