http://blog.csdn.net/zhongjiekangping/article/details/5164132
这篇文章讲的真好!
对于 "expr1 + expr2",(其中expr1,expr2都可能是复合表达式),不同的编译器想先算exp1就先算exp1,想先算exp2就先算exp2。而且,编译器不必保证exp1计算完毕之后才去计算expr2,它可以这么做,也可以不这么做。C语言标准里并不做规定。
一段正常的程序不应该由于加号前后的求解顺序不同而得到不同的结果。
因此,理解了结果不同的原因即可,没必要讨论结果到底是多少。