下列输出结果为什么是3 3 3 啊

#include<stdio.h>void main()
{int i=2,j=2,k=3;
if(i++==2&&(++j==3||k++==3))
printf("%d %d %d\n",i,j,k)
}

i++,先输出再执行加一运算,所以i++==2,先判断i==2,再执行i+=1;
++j,先执行加一运算,再输出,所以++j==3,先执行j+=1,再判断j==3;
k++,先输出再执行加一运算,所以k++==3,先判断k==3,再执行k+=1
所以执行完成后,i=3,j=3,k=3,输出3 3 3

这里括号优先级最高
先看++j == 3这一句为真,且j变成了3
由于||是短路或,前面为真就不用看后面了,k++不会执行
再看&&的前面
i ++ == 2为真,然后i ++ 变成了3
所以整个表达式为真
输出3 3 3

i++==2&&(++j==3||k++==3)
执行顺序:
1、判断i==2是否成立,成立
2、执行i++,i变成3
3、执行++j,j变成3
4、判断j==3是否成立,成立,整个if条件成立,后面的k++=3不会再执行,
所以i,j,k都是3

#include <stdio.h>

void main()
{
    int i = 2, j = 2, k = 3;
    if (i++ == 2 && (++j == 3 || k++ == 3)) // i++ == 2 相当于 i == 2, i += 1
                                            // ++j == 3 相当于 j += 1, j == 3
                                            // k++ == 3 相当于 k == 3, k += 1
        printf("%d %d %d\n", i, j, k)
}