道凡生
2015-06-27 20:19
a=3;a++=3;a=4.根据答案解析的运算顺序,本式重新运算加减时,a(4)+b%a(1)-b/a(1)+a*b(12)-a++(3)=13.
题目是:int a = 3; b = 4;计算a+b%a-b/a+a*b-a++该算式的运算结果以及运算后a的值.
我看了下你的想法,发现你在第一处a这里的想法是有问题的.其实你的想法也不算错,在这里应该算是C语言未定义的行为,在windows的VC编译器和Linux的GCC编译器对自增/减在同一个表达式中的处理方式不太一样,你的想法与VC编译器的处理方式差不多,然而本道题的答案倾向于GCC的处理方式.其实这里不用纠结.这里我给出我的理解:按照运算符的优先级可以将a+b%a-b/a+a*b-a++等价地改写为3+1-1+12-3.为什么第一处a会是3而不是4呢,因为四则运算的结合性是从左往右,即先计算a,再计算a++.所以最后计算的结果是12.由于a++改变了a的值,所以a为4.但在之前的a还是初始值.不懂的可以追问我.
没有高手能回答吗?
C语言入门
926025 学习 · 20793 问题
相似问题