这是C语言中称作“未定义”问题:在一个表达式中出现了两个或更多的带有“副作用”的子表达式(副作用指一个表达式除了取用表达式的值--主要作用--外又修改了某个变量的值--副作用-),ANSI C中未对其给出严格定义,由C语言编译系统自行处理--自己想怎样优化就怎样做。后果是上述程序在语法上不算错,但在不同环境下结果不一样。所以编程中要严格禁止这一类的代码出现----编程规范!一些教材上介绍、使用这类题目就是在误导!
引起“副作用”的表达式有三种:++和--、=和+=类、带返回参数的函数或宏,在一个表达式中出现对一个变量二次的副作用--结果是不必讨论的--无意义!
上述几位尝试解释它,一是无意义,二是有错误(没有想到6是由1+2+3得到的,编译后的程序又加了一个1).
试一试 a++ + a++ + a++;结果是10不是9!(VC和DEV C++都是一样)