C 什么时候是&;;&;和++;评价的?

C 什么时候是&;;&;和++;评价的?,c,C,我有以下代码: #include <stdio.h> int main(void) { int a = 0, b = 0, c = 0; printf("%d\n", a++ && b++ || c++); //Here, a++ gives 0. Still, c++ is evaluated. printf("%d %d %d\n", a, b, c); //Prints 1 0 1 a = 1, b = 0, c = 0;

我有以下代码:

#include <stdio.h>
int main(void)
{

    int a = 0, b = 0, c = 0;
    printf("%d\n", a++ && b++ || c++); //Here, a++ gives 0. Still, c++ is evaluated.
    printf("%d %d %d\n", a, b, c); //Prints 1 0 1

    a = 1, b = 0, c = 0;
    printf("%d\n", a++ || b++ && c++); //Here, a++ gives 1 and only a++ is evaluated.
    printf("%d %d %d\n", a, b, c); //Prints 2 0 0
}
#包括
内部主(空)
{
int a=0,b=0,c=0;
PrtTf(“%d n”),A++&B++ C++ +;//这里,A++给出0。C++仍然被评估。
printf(“%d%d%d\n”,a,b,c);//打印1 0 1
a=1,b=0,c=0;
printf(“%d\n”,a++| | b++&&c++);//这里,a++给出1,只对a++求值。
printf(“%d%d%d\n”,a,b,c);//打印2 0
}

为什么当&&的L.H.S.为0时,| |的R.H.S.会被计算?而在第二种情况下,| |的L.H.S.给出1,除此之外,没有任何计算结果?

这是因为运算符的优先级。首先计算
&&
,然后计算
|

printf("%d\n", a++ && b++ || c++);
相当于

printf("%d\n", (a++ && b++) || c++);
printf("%d\n", a++ || (b++ && c++));

相当于

printf("%d\n", (a++ && b++) || c++);
printf("%d\n", a++ || (b++ && c++));

希望这能让你更清楚。

你的问题应该得到回答