一道c语言自增的问题

int a=5,c;
c=(a++)+(a--)-(a++);
不能理解为什么c等于5,不是应该c=5+6-5=6吗,但是编译器跑出来等于5,有没有解惑的谢谢了

因为执行顺序的问题,a++ 是先拿a的值进行计算,计算结束之后再自加,所以执行顺序是
c = 5+5-5= 5
a++ , a--, a++
望采纳!谢谢

这是一个未定义行为。与之类似的还有函数调用时内多个参数的计算顺序问题如

func( param1 ++ , param1--);

在具体调用时的顺序是由编译器根据平台自行决定的。所以这个问题没有标准答案。在不同平台上面是不一样的。 《C专家编程》对此有描述。 也可以自行搜索 C语言+未定义行为获取更多信息。

++自增--自减。前缀和后缀不一样哦。
b=a++;先运算b=a;后自加
c=++a;先自加,后运算c=a.
所以这题c=5,a-6.

我的编译器跑出来是6啊,emm

#include<stdlib.h>
#include <stdio.h>
main(){
int a=5,c;
c=a++;
printf("%d %d\n",c,a);
a=5;
c=(a++)+(a--);
printf("%d %d\n",c,a);
a=5;
c=(a++)+(a--)-(a++);
printf("%d %d\n",c,a);
}

img