for循环变量放在内外为什么结果不一样


#include
using namespace std;
int main()
{
    for(int i=0;i<10;i++)
    {
        for(int i=0;i<10;i++)
        {
            cout<<"* ";
        }
        cout<<"\n";
    }
     
    return 0;
}

这段代码可以成功打出10x10的“ * ”号

而且我调试的时候发现嵌套在里面的那个for循环,当i=9时执行完大括号中的内容后,不会执行i++,结果仍然是9,然后给到外面的for循环i=9,让外面的for循环进行i++

除此之外,外面的for循环执行到第10次,明明里面的循环给他的i=9满足条件,他也不会进行i++操作,而是直接把i=9输出,进入return 0,结束程序

#include
using namespace std;
int main()
{
    int i=0;
    for(i=0;i<10;i++)
    {
        for(i=0;i<10;i++)
        {
            cout<<"* ";
        }
        cout<<"\n";
    }
     
    return 0;
}

这段代码就只能输出一排“ * ”

为什么定义在内和在外有这种差别呢

放在最上边申明就代表两个for里边都是用的申明的这个,放在for循环里边的话,各用各的,不受影响

for循环中,如果循环变量在for里定义,那么这个循环变量的作用域就是这个for循环内。所以第一段代码是OK的,因为两个循环变量i并没有在同一个作用域内,不是重复定义。在内层循环内的i与外层i无关。
第二段就不行了,由于i定义在for之外,导致内层循环变量和外层循环变量i是同一个变量,当内层循环一次执行完成后,i=10,实际也就是外层的循环变量i值变成10,循环就结束了,所以只能输出一行