c语言,n++、++n还等于n?

来源:百度知道 编辑:UC知道 时间:2024/06/04 06:38:07
编译器tc3,内容如下

main()
{
int a=1;
printf("%d%d%d",a++,++a,a--);
return 0;
}

结果是111?
每个人一种答案,我晕倒了。。 还是不懂,为什么编译器会有区别,这样如何做判断

printf语句,执行顺序是从右向左执行
先执行a-- ;这时屏幕上输出1,然后a自减变0
再执行++a ;先将a自加,然后输出a为1
最后执行a++ ;先输出a的值为1,然后a再自增变为2

你可以在程序最后添加一条语句printf("%d",a);看结果应该为2

!!注意:这是TC下的执行结果,与VC下结果不同,应该是编译器的差异

VC下的结果为221
——————————————————————
补充回答:
如果你是考试答题的话,以我答案里TC的解释为准。
如果是单位工作的话...我想不会有这种题的..一般编程都会避免二异的语句出现,考试考点主要是考你从右往左的顺序执行,所以参照我上边说的TC执行过程去判断

结果是221
a++是a先运算再加1,最后结果输出为2
++a是a先加1再运算,最后输出结果为2
a--是a先运算后减1

版本不一,结果不一样

会变得,至于怎么变每个编译器可能会不一样,congqiang2007你不觉得你的答案很有问题么,"a++是a先运算再加1,最后结果输出为2",很奇怪不是么,其实原因是printf是从右到左执行参数,我是用VC试的,可能会有编译器从左到右也说不定,最右边a--,先输出a,最右边输出的是1,然后执行++a,a在执行前先++,这时a=2,所以输出2,最后第一个参数先取a,输出2,然后输出的是221,最后printf结束a进行--和++,最终a=2

是111,没错··
因为,函数参数进栈是从右向左的··
所以先执行的是a--,再是++a,最后才是a++...