2005 21c语言

来源:百度知道 编辑:UC知道 时间:2024/06/19 20:07:40
main()
{int i=1,j=2,k=3;
if(i++==1&&(++j==3||k++==3))
printf("%d%d%d\n",i,j,k);
}程序运行后输出结果是()233
难道k++==3不用算嘛?
求详解过程

是的,在这个程序中,k++==3是不计算的.

||和&&操作符有一个短路求值特性,就是如果已经可以确定最终的结果,就不会再计算剩余的部分,如:

++j==3||k++==3

这个表达式会从左往右计算,先计算++j==3,由于这个表达式的计算结果为真,所以整个(++j==3||k++==3)表达式的值就已经可以确定为真了,于是k++==3就不必再计算了.

i++=1 先比较i是否等于1,IF是。I++;得出I=2;
++j==3||k++==3 原先j=2先算j++ ;j=3。k++==3和前面是与运算,一个为真就行了。

在 ++j == 3 || k++ == 3语句中
k++ == 3确实被短路通过了
执行不到