c语言二级问题

来源:百度知道 编辑:UC知道 时间:2024/05/31 20:39:45
#include<stdio.h>
main()
{
int i=1,j=1,k=2;
if((j++||k++)&&i++)
printf("i=%d,j=%d,k=%d\n",i,j,k);
}
这个题用VC6输出的答案为什么是i=2,j=2,k=2 k=2在if句里面不是有个k++么? 那么k++=2 那么k应该输出等于3呀!!

j++||k++是一个逻辑表达式
因为j++的值不为0,所以整个表达式的值就是真的了,就不计算后面的k++了,所以k++这个语句没有执行。

这是因为vc在这里的优化

||是或操作,计算a||b,如果a=1,还需要算b吗
当然不用,因为或操作有一个1,结果就1,因此
k++没有计算,直接跳过

if((j++||k++)&&i++)
你将上面这个换成
if((k++||j++)&&i++)
就知道是为什么了。

不管你在什么C编写环境下,K=2
因为当j++的值不为0时,这个表达式(i++||k++)永远为真,k++就不计算了.
如还有问题,请留言