P的值是意外的

时间:2015-10-05 13:53:30

标签: c geany

请问,您如何从技术上解释为什么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;
}

感谢您的回复。

4 个答案:

答案 0 :(得分:2)

因为在这种情况下(P++ != 3),您在实现++P之间的比较之后对值(3)求和。

如果您使用此类比较(++P != 3),则总和是在比较之前。

重点是(P++ != 3)(++P != 3)不一样。

答案 1 :(得分:1)

C11 standard州:

  

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