69,512
社区成员
![](https://csdnimg.cn/release/cmsfe/public/img/topic.427195d5.png)
![](https://csdnimg.cn/release/cmsfe/public/img/me.40a70ab0.png)
![](https://csdnimg.cn/release/cmsfe/public/img/task.87b52881.png)
![](https://csdnimg.cn/release/cmsfe/public/img/share-circle.3e0b7822.png)
本人小白,最近在看翁恺老师的C语言网课,想请教大佬上边这三个程序的运行结果为什么不一样,第三个我大概能明白,一二为什么调换了一下位置输出的结果就不一样了,不太懂其中的运算逻辑,真诚请教各位大佬。
我就解释一下第二题的计算过程:
printf("%d,%d\n",++a,a++)中,依次从右向左开始计算
int a=10
①a++,先使用(输出10)再自增1,10+1=11
②++a,a自增1 ,11+1=12
a最终值12
a++在计算过程中输出,++a按最终值输出。所以a++输出10,++a输出12
第一点,c 调用函数,参数入栈是由右向左进行的,即最后一个参数先被处理进栈;第二,这样的语句,歧义很大,不同的环境结果可能不一样,我用 vc2008 第一二题的结果分别是 11,11 和 11,10 和上面图中的不同,看来,应该是对语句的解释有异,vc2008 是把整个 printf() 最为一个语句,a++ 是在 printf() 之后执行的,而上面图里的,应该是吧每个参数都作为一个语句来理解了,这样的话,非单一的自增/减语句就是炸蛋,不应使用。