块如何在C++程序中工作

Sin*_*ngh 0 c++ block output

#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;
}
Run Code Online (Sandbox Code Playgroud)

输出:

20 10
30 10
20 10
Run Code Online (Sandbox Code Playgroud)

在这里,我无法理解输出中'i'的最后一个值,为什么它不是30而不是30.

请看这里的评论,如果我替换int i = 30; I = 30; .

现在的输出是:

20 10
30 10
30 10
Run Code Online (Sandbox Code Playgroud)

为什么这里"i"的最后一个输出值相对于上面的代码而改变了.

最后一个最重要的问题是什么是使用块的应用?

Wyz*_*a-- 6

i在此程序中调用了三个不同的变量:

  • 全球性的,
  • 当地人main,和
  • 另一个当地人在一个街区内main.

在块中,当您引用时i,您将获得该块中定义的局部变量.在块之外 - 包括它之后 - 块中的变量是不可见的,因此当您引用时,i您将获得main自身定义的变量.并且在所有情况下,都::i指的是全局变量.

当您更改int i=30i=30该块,你不再创建块中的一个新变量; 相反,您正在修改i在顶部定义的变量,该变量main与块结束后的输出语句所看到的变量相同.