for(int i=0,j=10;i=j=10;i++,j--)为什么是无限循环语句?新手提问

springchun 2007-10-13 09:25:50
for(int i=0,j=10;i=j=10;i++,j--)为什么是无限循环语句?新手提问
能说详细点吗?谢谢!
...全文
12114 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
wohow 2007-10-22
  • 打赏
  • 举报
回复 1
更正22楼:
int main() {
for(int i=0,j=10;i=j=10;i++,j--)
return 0;
}
这样的话是不会死循环的,for语句直接被跳过了,因为它没有循环体,不用break。
for语句没有被跳过,循环体是return 0;
for(...)必须和后面一个{}或;组成一个完整的语句,如果没有{}和;那么编译器是不允许的。
Tuzki 2007-10-19
  • 打赏
  • 举报
回复
to 13楼:
#include <stdio.h>

int main() {
for(int i=0,j=10;i=j=10;i++,j--)
return 0;
}


这样的话是不会死循环的,for语句直接被跳过了,因为它没有循环体,不用break。
#include <stdio.h>

int main() {
for(int i=0,j=10;i=j=10;i++,j--){}
return 0;
}

这样则是死循环。
Tuzki 2007-10-19
  • 打赏
  • 举报
回复 5
对于一个for循环:
for(expA; expB; expC)
用于控制循环退出的是expB,如果expB这个表达式的值为假,则for循环就结束。
这里,expB为i=j=10;
这是一个赋值语句,该表达式的值恒为10,转换成bool型也就是恒为真,当然死循环。
Mi_Bo 2007-10-19
  • 打赏
  • 举报
回复 3
for(int i=0,j=10;i=j=10;i++,j--)

i=j=10是赋值表达式,返回值是10,始终为真的,所以就是死循环啊
ZenJan 2007-10-19
  • 打赏
  • 举报
回复
这就好像
if(i=10)
这个条件始终为真!!
jacking27 2007-10-18
  • 打赏
  • 举报
回复
同意16楼的
ar4ever 2007-10-18
  • 打赏
  • 举报
回复 1
这个问题,我上课时候给我的学生讲了无数遍了。
luojinzhong2002 2007-10-18
  • 打赏
  • 举报
回复 3
问题处在:i=j=10
这个赋值语句,使得i++,j--失去了意义;因为每次循环后i,j都被重新赋值10,循环条件无法到达边界!!
JackyRao 2007-10-18
  • 打赏
  • 举报
回复 1
无趣的问题..
星光伴月 2007-10-15
  • 打赏
  • 举报
回复
8楼说得对:

i=j=10;这个表达式语句的结果是10,而10又是一个非0值,编译器就把它当成"真"处理,所以条件永远为真,是个死循环.
wohow 2007-10-15
  • 打赏
  • 举报
回复 1
for(int i=0,j=10;i=j=10;i++,j--)根本就不是语句,怎么是无限循环语句?
for(int i=0,j=10;i=j=10;i++,j--)break;不就可以向下执行了么
wubowhut 2007-10-15
  • 打赏
  • 举报
回复
对方是否打算 第三方身份 似懂非懂 山东分舵是 圣诞风俗
welcome1998 2007-10-14
  • 打赏
  • 举报
回复
学习4,5,8楼的精神
nx500 2007-10-14
  • 打赏
  • 举报
回复
汗一下四楼tx的答复,接着5楼tx的话多说两句。
具体将,string2应该叫做条件表达式,可以是任何形式的表达式,比如说:逻辑判断/赋值/复制等等,最终判断的是表达式的结果。对于i=j=10这个连续的赋值表达式,想一下,赋值表达式返回的是左值,也就是最后的i,那么i等于10,大部分的编译器都规定,非0值就表示真,只有0值表示假,所以这里总是返回10,那自然也就是一个死循环了。

n02053212 2007-10-14
  • 打赏
  • 举报
回复
==
pridesnow 2007-10-14
  • 打赏
  • 举报
回复
赋值语句
quentinliu 2007-10-14
  • 打赏
  • 举报
回复
hehe ,楼主的问题我以前长犯,哈哈,与君同勉。
springchun 2007-10-13
  • 打赏
  • 举报
回复
谢谢大家了,我明白了,谢谢
lixiaogz 2007-10-13
  • 打赏
  • 举报
回复
这个问题可以这样理解,在for(string1;string2;string3)中,string1用于设定循环变量处置,string2用于循环判断,string3用于改变循环变量到调节,一般情况下,我们采用逻辑判断表达式来决定循环是否执行,而如果在这里采用赋值语句,其逻辑值始终为真,导致循环始终执行,于是造成了死循环~
effective_person 2007-10-13
  • 打赏
  • 举报
回复
该语句只是一个赋值语句,只能进行类型检查,不能进行逻辑判断.如果类型符合.赋值自然是可以成功的,就可以看作为真
加载更多回复(3)

65,179

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧