块如何在C++程序中工作
How a block work in a C++ program
#include<iostream>
using namespace std;
int i=10;
int main()
{
int i=20;
cout<<i<<" "<<::i;
{
int i=30; //from here
cout<<endl<<i<<" "<<::i;
}
cout<<endl<<i<<" "<<::i<<endl;
return 0;
}
输出:
20 10
30 10
20 10
在这里,我无法理解输出中"i"的最后一个值,为什么它是 20 而不是 30。
请从这里看评论,如果我用 i=30; 替换 int i=30;。
现在输出为:
20 10
30 10
30 10
为什么这里的最后一个输出值"i"相对于上面的代码发生了变化。
最后最重要的问题是使用块的应用是什么?
在这个程序中,有三个不同的变量称为i
:
- 一个全球性的,
main
的本地人,以及main
一个街区内的另一个本地的.
在块中,当您引用 i
时,您将获得在该块中定义的局部变量。 在块之外(包括块之后(,块中的变量是不可见的,因此当您引用i
时,您会得到main
本身定义的变量。 在所有情况下,::i
都是指全局变量。
当您在块中将int i=30
更改为i=30
时,您不再在块内创建新变量;相反,您正在修改在main
顶部定义的i
变量,这与块结束后输出语句看到的变量相同。
这正是范围界定的工作方式。最内层块中的i
与块外的i
完全不同,它恰好具有相同的名称。这引入了名称阴影。
如果您打算使用原始变量,请不要再次将其声明为 int
,否则您将定义一个新变量。如果您打算使用新变量,请为其选择其他名称。
{
int i=30; //from here
cout<<endl<<i<<" "<<::i;
}
您正在创建一个等于 30 的局部变量 i。局部变量 i 具有块范围。这将覆盖外部变量 i。一旦它位于大括号之外,局部变量 i 将被删除或超出范围。
当它被改变时,
{
i=30; //from here
cout<<endl<<i<<" "<<::i;
}
它指的是同一个变量。所以没有新的局部变量创建。你只是分配 i = 30。
而::i
是指具有文件范围的全局变量 i,在顶部声明。
相关文章:
- 以螺旋方式打印矩阵的程序.(工作不好)
- 我的评分程序无法正常工作
- 如何解决在负数的情况下程序以相同方式工作的问题?
- C++程序工作,但 Windows 显示"程序.exe已停止工作"
- 我无法让我的程序工作,我一直得到未定义的符号:C
- 名为DLL的C++windows服务程序工作不正常
- O2优化水平中断程序工作
- 我在一个生成随机数的程序工作,我想将这些数字存储在一个数组中
- 在我的输入中没有空格的情况下,程序工作正常?C++
- qt检查文件中是否存在文件,如果它没有提示用户输入其位置,则将文件复制到程序工作目录
- 我如何使用关系 btwn 3 整数来确定三角形和/或我可以使用什么声明来使这个程序工作
- 程序工作,但当输入无效时,它会继续循环 c++
- C++ 让腔室为老虎机程序工作
- 打印一个值使程序工作
- 分割故障,程序工作正常
- 如何使程序工作而不要求任何链接的文件
- Pthreads程序工作一段时间,然后停止
- msvc++说变量周围的堆栈正在损坏,但程序工作
- 读取和显示opencv视频的程序工作不正常
- 无法让数学 c++ 程序工作