int i=3,j=0; j=(i++)*(++i)+(i--)*(--i) ;求j, 为什么输出结果是25啊,应该是18啊,不明白啊,求解

2025-04-04 14:50:41
推荐回答(5个)
回答1:

这个。。。
哪本书的上的例子。
答案根据编译器不同而不同,最好不要这样写。
理解这个需要理解(;)顺序点。

回答2:

我用编译器测试了一下 输出确实是18
应该是前缀++优先级比较高 ++ --执行完之后才执行的乘法和加法
等价于:
++i;
--i;
j=i*i+i*i;
i++;
i--;
应该是j=3*3+3*3 = 18

回答3:

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*/

回答4:

这有什么,相当于3*4+3*2=18
有什么不明白的吗。优先级问题。++i是计算之前就自加了1,i++是之后才自加1,懂了没?

回答5:

首先执行++i,此时i=4,然后执行(i++)*(++i)为4*4 即16 最后运行i++,此时i为5