这个。。。
哪本书的上的例子。
答案根据编译器不同而不同,最好不要这样写。
理解这个需要理解(;)顺序点。
我用编译器测试了一下 输出确实是18
应该是前缀++优先级比较高 ++ --执行完之后才执行的乘法和加法
等价于:
++i;
--i;
j=i*i+i*i;
i++;
i--;
应该是j=3*3+3*3 = 18
i++就是语句执行完毕以后补做一个i=i+1的赋值,++i就是在语句执行之前执行一个i=i+1语句,这是所有C语言的标准,不存在不通编译器不同结果的可能。
依照上面说的原则,语句 j=(i++)*(++i)+(i--)*(--i) ; 相当于如下系列语句,完全等效:
(i++)*(++i);/*执行此语句后i=5,j=16*/
(i--)*(--i);/*执行此语句后i=3,j=16+9=25*/
这有什么,相当于3*4+3*2=18
有什么不明白的吗。优先级问题。++i是计算之前就自加了1,i++是之后才自加1,懂了没?
首先执行++i,此时i=4,然后执行(i++)*(++i)为4*4 即16 最后运行i++,此时i为5