花了二十分钟查资料,终于找到了。
书上这么写的:
如有以下表达式:
i = 3
(i++)+(i++)+(i++)
表达式的值是多少呢?有的系统按照左结合性,先求第一个括号内的运算,再求第二个括号内的运算,最后求第三个括号内的运算,该表达式也就相当于 3+4+5;而另一些系统(如 Turbo C和MS C)把3作为表达式中所有i的值,因此三个i相加得到9。
为了避免这种歧义性,应该用这种方法实现:
a = i++;
b = i++;
c = i++;
d = a+b+c;
执行以上语句就消除了程序的二义性。
对于你的情况,应该是上述中的第二种,系统把表达式中的i当做同一个值来进行运算了。
你可以这样做:
int a = i++;
int b =i++;
printf("%d\n";a*b);
以此来的到你想要的结果。
详细内容见《C程序设计》第三版 谭浩强 著 第58页