[C] (++a)*(a++)+(++a)的值是多少?

来源:互联网 发布:apache ant 1.9.4安装 编辑:程序博客网 时间:2024/04/29 18:28

杨开城《白话C语言》P81:

int a,b;a = 1;b = (++a)*(a++)+(++a);
书中原话是这样的:“由于上面对b的赋值语句中存在着3次对a的自增运算,其中有2次是左侧自增,a的初始值是1,因此先对a自增2次,a的值变为3,接着进行乘法和加法运算,b的值将是12。”

一看这话就感觉分析得太想当然了吧,VC6.0一试,b的值是7,果然不对,再用VS2005一试,b值为12。

你想老半天其计算顺序,终究还是依赖于编译器的,究其原因不过是C标准没有定义子表达式(++a)*(a++)和(++a)的计算顺序(“C将这个选择权留给实现者,这是因为可能一种选择在一种硬件上效率更高,而另一种选择在另一种硬件上效率更高。”——《C Primer Plus(第五版)》;“之所以未作定义,是想让编译器充分利用自身架构的特点,或者充分利用存储于寄存器中的值。”——《C专家编程》),真正写程序中根本不该出现这样有歧义的式子。

说白了研究这种计算题没有意义╮(╯▽╰)╭

0 0
原创粉丝点击