是否有人可以为表达式绘制优先级树,请在C中进行表达式求值后解释副作用。值。
int i=-3, j=2, k=0, m;
m= ++i || ++j&&++k;
根据我的输出应该是-2 3 1 1但是我的gnu c编译器打印是-2 2 0 1? 我想知道怎么做?
答案 0 :(得分:8)
j
m= ++i || ++j && ++k;
↑
在此阶段,m
已被评估为1,无论||
的右侧是什么。为什么?
因为1 || anything
是1。
答案 1 :(得分:0)
&&
中的||
和C
运算符短路。这意味着如果左侧的值足以确定总值,则永远不会评估右侧。
您的表达式被解析为(++i) || ((++j)&&(++k))
。 ||
短路,因此在评估++i
后,其值已被发现为-2
(true
值),不再评估表达式。