最后输出a++和++a的值我不懂,烦请大神帮帮忙

我尝试了一下书上的例子,输出a++和++a时的值是相同的,都为4,用的是vc6。
麻烦大神们帮帮我,解释一下为什么是这个答案,谢谢!

下面是代码:
#include "stdio.h"
main()
{
int a=1,sum;
printf("%d\n",a);
sum=(a++)+(a++);
printf("%d\n%d\n%d\n",sum,a++,++a);
return 0;
}

输出的值:
图片说明

什么破书会讨论这个“问题”,只能说明写书人的无知。

这个属于c语言的未定义行为,不同的编译器,得到的结果都是不同的。

详细请阅读
https://blog.csdn.net/qq_29169813/article/details/51416281

不是很明白,但是可以给你拓宽一下思路,如果以后遇到这总情况,但是,也希望不要再用这种程序,毕竟不能掌握在自己手中。

#include <stdio.h>

int main(void) {
    int i = 1;
    int j = 1;

    printf("i: %d\t%d\t%d\t%d\t%d\t\n", i, i++, i, i++, i);
    printf("j: %d\t%d\t%d\t%d\t%d\t\n", i, i++, i++, i++, i);

    return 0;
}

自己输出一下,看看结果,相信你会发现规律了。

a++相当于使用a之后执行了一句a=a+1;
++a相当于使用a之前执行了一句a=a+1;

代码我用VS2017跑出来的是1,2,4,5。
知识点:i++是先人后己,++i是先己后人(以前学的时候见过的一句话),再看代码

int a=1,sum; //a = 1, sum没有赋值是个随机数

printf("%d\n",a); //a = 1;

sum=(a++)+(a++); //这里呢是有争议的,我还看到过一句话“i=i++行为未定性,不同的编译器结果不同。”所以我尝试使用VS的sum= 2,使用在线编译器sum= 3;
图片说明
sum执行结束后两者都是a = 3

printf("%d\n%d\n%d\n",sum,a++,++a); //这里输出语句,a++或者++a在这里都是先完成递加再传值,所以输出a++= 4,++a = 5。