地上式水泵接合器图片:i,j,k是int,i=j=k=-1,执行i++||++j&&++k后,ijk的值分别变成了0,-1,-1,请问k的值为什么是-1?

来源:百度文库 编辑:杭州交通信息网 时间:2024/05/01 03:33:53
这是C的一个问题。
类似的,还有3个这样的表达式:
++i||++j&&++k;(i=0;j=0;k=-1)
++i&&++j||++k;(i=0;j=-1;k=0)
i++&&++j||++k;(i=0;j=0;k=0)
不知能不能用一种理论解释上面4个表达式。
编译器是TC2.0;

这个题不同的编译器结果不同,不过我先告诉你在 Turbo C 中这是为什么:

首先计算 i++,返回的是 -1,i 的值变为 0。

对于 || 和 && 来说,已经有了一项的值为真了(-1),不管其它两项结果是什么,整体的结果都为真,此时,Turbo C 的编译器就不去再做无用功了,所以 ++j 和 ++k 根本就不会被执行。

更正richardbao2000
或操作符||不会因为第一项判断条件不成立而停止执行,只有与操作符&&才有这个特点

试想如果 0||1 的结果因为前件是0 而返回0值
那电脑不就秀逗了^^

是C 语言吗?(TC2.0)
这个表达式相当于(i++)||(++j&&++k)因为”||”作边是-1,是非零!所以右面的表达式不执行!因为无论右面的表达式的值是真是假!整个表达式的值都是真(1)的!所以K++没有被执行!所以是-1!(K++先用后执行)!
同样的道理!”&&”也有这个性质的!当”&&”表达式的左侧是假(0)时!”&&”右面的表达式是不执行的!!