为什么我没有收到错误?

时间:2016-08-13 08:27:41

标签: c++

在以下程序中:

#include <iostream>
using namespace std;

int main(){

int i = 99;

for(int i = 1; i <= 10; i++)
{
    cout << i << endl;
}
cout << endl << endl;

cout << i << endl;

return 0;
}

编译时我没有收到错误。 我的问题是为什么会这样。 int变量i已声明两次。第一次imain()函数中声明,因此其范围将是整个main()函数,包括for循环。第二次使用i循环声明for,因此其范围仅为for循环。所以,现在在for循环的范围内存在两个int变量i。这不应该是错误的原因吗?如果不是为什么?

第二件事是我得到的输出:

  

1
  2
  3
  4
  5
  6
  7
  8
  9
  10个
  
  99

我也不了解输出。为什么在执行for循环后,正在打印的i的值为99而不是10.

1 个答案:

答案 0 :(得分:3)

您可以在不同的范围内定义具有相同名称的变量。第一个变量imain函数的范围内定义。在循环中,您为循环声明的变量有另一个隐含的嵌套和匿名范围。

对于编译器,代码

for(int i = 1; i <= 10; i++)
{
    cout << i << endl;
}

或多或少等同于

{
    int i;
    for(i = 1; i <= 10; i++)
    {
        cout << i << endl;
    }
}