c++的全局变量和局部变量

C++ global and local variables

本文关键字:局部变量 全局变量 c++      更新时间:2023-10-16

我遇到了以下代码:

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

可以通过编译,但是给出了错误的答案,如何解释?

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

它用自己初始化自己(它有一个不确定的值)。所以全局的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;编译没有任何错误,但当你运行程序时,它会产生错误,因为本地i有不确定的值。

在c++中,如果您有一个同名的局部变量,则可以访问全局变量,但必须使用范围解析操作符::

换行

int i = i;

int i = ::i;

和程序将编译和工作

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