| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 700 人关注过本帖
标题:深夜求解疑问:
只看楼主 加入收藏
qpalqpal
Rank: 1
等 级:新手上路
帖 子:14
专家分:1
注 册:2010-8-7
结帖率:75%
收藏
已结贴  问题点数:10 回复次数:5 
深夜求解疑问:
#include<stdio.h>
void main()
{
    int i,j=3;
    for(;i=j;i--,j--)
      printf("%d\n",i);
}
这题输出的是 3
             2
             1
为什么不是一直减下去,减到-32768呢?
搜索更多相关主题的帖子: 求解 疑问 
2010-08-09 00:00
xxwpk007
Rank: 4
等 级:业余侠客
帖 子:166
专家分:289
注 册:2007-7-29
收藏
得分:3 
到0就为假了
2010-08-09 00:05
星舞突击者
Rank: 2
等 级:论坛游民
帖 子:15
专家分:68
注 册:2010-7-30
收藏
得分:3 
楼上正解,for循环的第一个分号后就是一个判断,跟if一样,第一次i=3,为真,执行循环体,输出3,i--后变为2;还是为真,再执行循环体,输出2,i--后变为1;为真,输出1,i--变为0;再次判断时为假跳出循环,我是这么理解的
2010-08-09 00:28
hackerjiang
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:地球
等 级:版主
威 望:3
帖 子:780
专家分:111
注 册:2007-4-27
收藏
得分:4 


楼主的疑惑主要是:存在真假问题的一般是判断表达式,没有遇到过赋值表达式存在真假问题的情况。


其实,赋值语句确实不存在真假问题,那么C编译器是此刻是怎样处理 赋值语句 的?
我给楼主一段小代码,在VC6下通过编译,楼主自然会明白的:
图片附件: 游客没有浏览图片的权限,请 登录注册

再来看看结果
图片附件: 游客没有浏览图片的权限,请 登录注册

其实,不仅仅是赋值语句,甚至printf也可以出现在FOR循环中,对于这类不存在真假问题的语句,编译器处理的方式仅仅只是执行而已,不存在判断问题。
如果仅仅只有一个赋值语句,比如你给的例子,你可以看成是:for(;i=j,i;i--,j--),运行的结果还将回事一样的。

对了,补充一下:实验二的循环只执行了一次,判断了两次。第一个0和最后一个0都是判断输出,第二个0才是循环输出,所以一共有3个0。


[ 本帖最后由 hackerjiang 于 2010-8-9 01:37 编辑 ]

(づ ̄ 3 ̄)づ
2010-08-09 01:28
qpalqpal
Rank: 1
等 级:新手上路
帖 子:14
专家分:1
注 册:2010-8-7
收藏
得分:0 
谢谢你们,我明白了。
2010-08-09 09:08
sunyh1999
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:14
帖 子:1178
专家分:3032
注 册:2009-5-17
收藏
得分:0 
汗,到0就为假了,所以条件不成立,跳出循环

欢迎来到我的博客:http://blog..cn/noisunyuhong
2010-08-09 09:09
快速回复:深夜求解疑问:
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.030064 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved