如下:
int main()
{
for(int i=1;i>0;)
{
i--;
printf("for hello!\n");
}
while(int i=1)
{
i--;
printf("while hello!\n");
}
return 0;
}
结果是输出一次 "for hello",无限次 “while hello”
我的疑问是,为什么for循环括号里定义的i,下次循环的时候可以保持递减值,而while循环里定义的i,从输出结果来看,貌似是每次循环都重新定义了一次?
答案
首先你要确定for和while里面的各个字段分别表示什么含义:
for的括号里面分为三个部分,这三个部分用 “;”隔开:
1.表示初始化循环变量,整个for语句只会在第一次进入的时候执行;
2.表示判断条件,在每次进入for循环里面之前会执行判断,如果条件为true才会进入for循环;
3.表示增量操作,每次for循环结束的时候都会执行第3部分的语句,这里可以对循环变量做一些增量操作,从而控制循环。
while语句的括号里的内容表示的是判断条件,与for语句括号里面的第2部分一样,在每次进入while循环之前都会执行判断,如果条件为true就进入while循环。
说到这里就容易理解了,你的for语句里面的 i 初始化为 1 ,后来在循环体里面自减了,第二次执行判断的时候条件不成立了,所以只执行了一次。
你的while语句括号里面是一个变量定义的语句,它作为条件判断总是成立的,得到条件为 true ,所以会进入循环体,尽管里面的 i 自减了,但是下次再判断的时候,还是一个变量定义语句,条件依然成立,所以每次都会进入循环体。