说明编译器是从表达式右往左进行计算的。可以很负责任的告诉你,如果是自己学C来用,完全不要钻类似的牛角尖,这是跟编译器有关的,可能微软的VC是这个结果,Keil的C又是另外一个结果,BrolandC又不一样。所以如此的节省笔墨一来带来逻辑上的混乱,程序大的话找这种错误非常麻烦。这种东西我感觉就是老师无聊没事折腾学生用的怪题(学编译原理的除外)。。。
i = (int)a[ptr] + a[++ptr]; //这个语句有二义性,在不同的编译系统下,结果不相同。楼主没有必要深究。编程不要写这种不确定的语句,考试就更不会考了。
我的VC6.0环境里运行两次都是32.这可能取决于编译器,而你的如果是结果是22的话,可能是+运算先计算右边的值后运算左边的值。 取决于编译器。因为你无法知道+运算,编译器是先计算左边,还是计算右边,这可能取决于编译器,所以,不要写出取决于编译器的代码。
可加Q群:186394662