C++-为什么在for循环的括号里定义的变量可以循环读写而while里定义的不行?

发布于 2017-02-16 04:22:55 字数 260 浏览 1285 评论 6

看下面这段c++代码:

int main()
{
for(int i=1;i>0;)
{
i--;
printf("for hello!n");
}

while(int i=1)
{
i--;
printf("while hello!n");
}
return 0;
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

想挽留 2017-08-30 15:15:02

一般,除for外,while最好不要在头语句中定义变量。While定义语句是“重定义--消亡论”:在循环中定义的变量在每次循环里都要经历创建和撤消的过程。如下程序i变量定义域在块内,会多次输出2:

int cc=1;
while(int i=1)
{
cc++;
i++;
cout<<i<<endl;
if(cc>10) break;
}

while允许在块中重复定义一次变量

 while(int x=3)
{
cc++;
int x=2; //这句不出错
//int x=1; //再加上这句重定义出错
if(cc>10)
break;
}

应该说此时while头语句中的int x=3会被忽略。
再来看下for语句,它与while不一样。
如下程序输出10。如果定义域仅在for块中,i应该是不可视的。

 for(int i=0;i<10;++i);
cout<<i<<endl;

可以看到,上面的for语句分解如下:

 int i=0;
for(;i<10;++i);

想想也是,如果int i=0;放在块内,之前的i<10;i++中的i就不可见了。
所以说是“被迫的”规定。

想挽留 2017-08-21 15:11:12

每次while语句里边都被定义了一次,都返回true,所以会无限循环下去;而for里边有i--,实际上就等于for语句中的第三段

偏爱自由 2017-05-11 08:31:35

1、在for(1;2;3)循环中,第1个句子只有在循环开始时执行一次,而第2、第3个句子则在后边的循环中每次都会执行,所以相当于只执行了一次int i=1,只对i作了一次定义,就可以循环读写前边对i的修改;
2、在while(int i=1)相当于每次循环都对i进行重新定义,所以,会出现无限循环。

瑾兮 2017-04-21 22:24:42

首先你要确定for和while里面的各个字段分别表示什么含义:
for的括号里面分为三个部分,这三个部分用 “;”隔开:
1.表示初始化循环变量,整个for语句只会在第一次进入的时候执行;
2.表示判断条件,在每次进入for循环里面之前会执行判断,如果条件为true才会进入for循环;
3.表示增量操作,每次for循环结束的时候都会执行第3部分的语句,这里可以对循环变量做一些增量操作,从而控制循环。

while语句的括号里的内容表示的是判断条件,与for语句括号里面的第2部分一样,在每次进入while循环之前都会执行判断,如果条件为true就进入while循环。

说到这里就容易理解了,你的for语句里面的 i 初始化为 1 ,后来在循环体里面自减了,第二次执行判断的时候条件不成立了,所以只执行了一次。
你的while语句括号里面是一个变量定义的语句,它作为条件判断总是成立的,得到条件为 true ,所以会进入循环体,尽管里面的 i 自减了,但是下次再判断的时候,还是一个变量定义语句,条件依然成立,所以每次都会进入循环体。

想挽留 2017-04-07 07:10:22

for()里面的叫做expression。while()里面的叫做condition

归属感 2017-03-05 00:30:11

因为你的while的条件有问题!int i=1并不能当做一个条件表达式,最好也不要再while的条件里定义变量。然后因为for循环体里有i--语句所以下次循环的时候可以保持递减值,而while循环因为在条件里定义变量i,所以每次循环都重新定义了一次!正确的写法是:

 int i = 1;
while(i>0)
{
i--;
printf("while hello!n");
}

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文