main()
{
int i=1,j=2,k=3;
if(i++==1&&(++j==3||k++==3))
printf("%d %d %d\n",i,j,k);
}
这里if结构中的&&(与运算)之前i++所得的值其实是1(如2楼所说的一样),然后i增值1变成了2.也就是说第一个条件为真。
++j==3||k++==3 或运算中++j先增值1变成3后在被赋值给表达式,故此或运算中++j=3为真,K++表达式所得的值跟i++形式一样,但是由于或运算前面为真,故此k++==3这个表达式没被执行。
&&运算同真为真,||运算同假才为假,对于或运算只要前面一个一为真,那么后面的就不执行。
因此if结构都为真:即printf("%d %d %d\n",i,j,k);语句会被执行
还有就是这里的if我没理解错的话不是循环的意思,毕竟if的机构只是起到了一个判断的作用,故没有循环的说法,如果if为假,得不到任何结果而已。
所以综上所述:(虽然有点啰嗦)
见笑了呵呵
最后显而易见
输出值为:
2 3 3
[
本帖最后由 因为曾今年少 于 2011-4-23 17:11 编辑 ]