请问,您如何从技术上解释为什么P =2
而不是P=3
。 (我在Geany上尝试了它,它的值为2)。
int main()
{
int N = 10, P = 5, Q = 10;
N = 5;
P = 2;
Q = ++N == 3 && P++ != 3;
printf ("N=%d P=%d Q=%d\n", N, P, Q);
return 0;
}
感谢您的回复。
答案 0 :(得分:2)
因为在这种情况下(P++ != 3)
,您在实现++
和P
之间的比较之后对值(3
)求和。
如果您使用此类比较(++P != 3)
,则总和是在比较之前。
重点是(P++ != 3)
和(++P != 3)
不一样。
答案 1 :(得分:1)
6.5.13逻辑AND运算符
4与按位二进制&操作员,&&运营商保证从左到右的评估; 在评估第一个操作数后有一个序列点。如果是第一个操作数 比较等于0,不评估第二个操作数。
因此,基本上只有++N == 3
正在执行。它的结果总是注定要false
。因此,刚刚跳过了AND
操作的正确部分。
如评论中所述,此类行为称为Short-circuit评估。
答案 2 :(得分:1)
Q = ++N == 3 && P++ != 3;
第一个表达式(++N == 3)
为false,因此程序甚至不执行第二个表达式。这种现象称为Short Circuit Evaluation
答案 3 :(得分:0)
foreach