C语言中的后增量概念

C语言中的后增量概念,c,operators,C,Operators,产出及原因?根据我的知识,在执行语句后进行增量后评估。在左侧,逻辑“i”值是1还是2 #include <stdio.h> int main() { int i = 1; if (i++ && (i == 1)) printf("Yes\n"); else printf("No\n"); } #包括 int main() { int i=1; 如果(i++&(i==1)) printf(“是\n”); 其他的

产出及原因?根据我的知识,在执行语句后进行增量后评估。在左侧,逻辑“i”值是1还是2

#include <stdio.h>
int main()
{
    int i = 1;
    if (i++ && (i == 1))
        printf("Yes\n");
    else
        printf("No\n");
}
#包括
int main()
{
int i=1;
如果(i++&(i==1))
printf(“是\n”);
其他的
printf(“否”);
}
如果逻辑“i”值为1或2,则在左侧

它将是2,因为逻辑
&&
的左操作数和右操作数的求值之间存在一个偏差

将序列点定义为

序列点是尘埃沉降的时间点,到目前为止看到的所有副作用都保证是完全的

这意味着在计算
&&
的右操作数之前,
i
的副作用已得到保证。

结果将为否,因为在计算i++之后,i将立即递增。

请尝试
i++*i++*i++

谢谢您的解释。我没有更多的问题,我不想创建单独的主题,所以你能帮我吗?如果(a==a--)printf(“真1\t”);如果条件为真或不为真,为什么?实际上,根据算术运算符序列,减量运算符先于赋值运算符,因此首先减量,然后进行检查。因此它类似于
a==(a-1)
。那么a==a--和a===a没有区别?@MayurRaikwar:
a==a--
产生未定义的行为。您正在尝试在没有插入序列点的情况下读取和修改变量。我检查了dev cpp中的代码块和ideone都给出了相同的结果。所以请给我解释一下,这是一种不明确的行为