C语言,关于++ --计算的代码,为什么会输出这样的结果。

下列代码为什么会这样输出,请大佬指点。
#include
int main()
{
int x=5;

printf("%d\t%d\t%d\t%d",x++,++x,x--,--x);

}
程序输出为4 5 4 5
希望能告知其计算规则和输出规则。

对于函数参数的求值顺序,在c语言里是未定义行为,这意味着编译器可以任意实现,而不必统一。所以不要在参数上使用副作用表达式。

测试代码:

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

    x = 5;
    printf("\n%d\t%d\t%d\n",++x,++x,++x);
    x = 5;
    printf("\n%d\t%d\t%d\n",x++,x++,x++);
    x = 5;
    printf("\n%d\t%d\t%d\n",--x,--x,--x);
    x = 5;
    printf("\n%d\t%d\t%d\n",x--,x--,x--);

    x = 5;
    printf("\n\n%d\t%d",++x,x++);
    x = 5;
    printf("\n%d\t%d",x++,++x);
    x = 5;
    printf("\n\n%d\t%d",--x,x--);
    x = 5;
    printf("\n%d\t%d",x--,--x);
}

运行结果:

图片说明

总结:

计算规则

对于++x、--x、++x和--x,其计算过程是从右往左计算
即printf("%d\t%d\t%d\t%d",x++,++x,x--,--x);的计算顺序为:--x x-- ++x x++

输出规则

对于++x和--x,其输出值是最终运算结果。
即5-1-1+1+1=5
对于x++和x--,其输出值是其右侧计算结果。
即第2个4是计算--x后的结果,第1个4是计算--x x-- ++x后的结果。