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;
}
可以通过编译,但是给出了错误的答案,如何解释?
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;
和程序将编译和工作
大多数答案描述的概念被称为阴影
相关文章:
- 赋予全局变量而不是局部变量优先级的函数 - (异常行为)
- 使用全局变量与局部变量和require
- 将变量声明为全局变量,然后声明为局部变量 -Shadowing-
- 局部变量如何隐藏全局变量
- 编译器是否可以从全局变量中读取两次,而不是存储一个局部变量
- 我不知道如何让我的程序使用局部变量而不是全局变量
- 怎么可能有两个同名的变量——一个是全局变量,另一个是局部变量
- 递归计算在不使用静态局部变量,全局变量或静态函数的情况下,在递归函数中发生的环数
- 初学者程序员 c++(局部与全局变量声明)
- 使用局部全局变量在单独的线程中运行C函数
- Arduino/C++全局变量与局部变量
- 编译器如何知道变量是全局变量还是局部变量(C)
- 当局部变量被复制到全局变量时,C++GCC优化速度会减慢
- 为什么局部变量不隐藏数组定义中的全局变量
- 要创建持久变量,最好是使用局部静态变量还是全局变量
- 全局变量和局部变量
- C++:全局变量与局部变量.使用什么
- C++-全局变量与局部变量的读/写速度
- 理解局部和全局变量:C++
- 在 C++ 中将局部变量分配给全局变量