本人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,这个是为啥呢_,谢谢!
这个没辙
因为C和C++的区别中的一点就在这;
。。。。。。。
a和ptr关系是ptr是a的地址,因此对地址指向值的改变也就是对变量值的改变,因此肯定是相同的。至于vc与dev运行结果不同是编译器实现上的区别,vc是正常的,dev是有中间变量实现++的,++前的值复制给中间变量,++后又被复制为中间变量的值就是先变成9又恢复为8,vc则是不用中间变量所以自增了。