为什么输出的是9,9,而不是8,8?

本人c语言初学者,算是刚刚入门,请教万能的csdn
题目是二级C中的

# include <stdio.h>

main()

{

int a = 2, * ptr;

ptr = &a;

*ptr = 8;

a = (*ptr)++;

printf("%d,%d\n", a, *ptr);

}

疑惑点在a=(*ptr)++;这里,不清楚a的变化,我的思路是a由2变为8再变为9,最后变为8,程序输出8,9,求解答a的变化过程及原因,_还有就是为什么这串代码在不同编译器里运行会有不同的结果,vs2019中输出9,9,devc++输出8,8,vc6.0输出9,9,这个是为啥呢_,谢谢!

img

如果我的回答对你有帮助,请点击旁边的采纳按钮,谢谢

这个没辙
因为C和C++的区别中的一点就在这;
。。。。。。。

a和ptr关系是ptr是a的地址,因此对地址指向值的改变也就是对变量值的改变,因此肯定是相同的。至于vc与dev运行结果不同是编译器实现上的区别,vc是正常的,dev是有中间变量实现++的,++前的值复制给中间变量,++后又被复制为中间变量的值就是先变成9又恢复为8,vc则是不用中间变量所以自增了。