在以下程序中:
#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
已声明两次。第一次i
在main()
函数中声明,因此其范围将是整个main()
函数,包括for
循环。第二次使用i
循环声明for
,因此其范围仅为for
循环。所以,现在在for
循环的范围内存在两个int变量i
。这不应该是错误的原因吗?如果不是为什么?
第二件事是我得到的输出:
1
2
3
4
5
6
7
8
9
10个
99
我也不了解输出。为什么在执行for
循环后,正在打印的i
的值为99而不是10.
答案 0 :(得分:3)
您可以在不同的范围内定义具有相同名称的变量。第一个变量i
在main
函数的范围内定义。在循环中,您为循环声明的变量有另一个隐含的嵌套和匿名范围。
对于编译器,代码
for(int i = 1; i <= 10; i++)
{
cout << i << endl;
}
或多或少等同于
{
int i;
for(i = 1; i <= 10; i++)
{
cout << i << endl;
}
}