C语言中的i++、++i的优先级

2025-03-23 01:40:13
推荐回答(4个)
回答1:

++运算符优先级高于乘法运算,因此,先执行++i(和你加不加括号没有关系,即等价于i*i*++i),i变成2,再执行乘法运算2*2*2=8,结果是8,而不是2

运行验证:

分析无误。

如果是i++,而不是++i,则计算结果是1,同样也不是2

回答2:

i++表示i参加完所在算式后再自增,++i表示i自增后再参加所在算式运算,如:
i=1;
a=i++; //a=1.
a=++i; //a=2.

回答3:

因为++i是先+再使用,所以a=1*1*2
如果是a=i*i*(i++);输出将会是1

回答4:

前几天开始学编程,也遇到了这个问题,经过很多次实践后发现了一些规律。
对于i++,很简单,整个式子先用i初值计算,然后根据i++的个数(严格说是运行次数)来更新i值。
对于++i就比较麻烦了。我要说的这句话很重要:++i虽然有着比算术运算符更高的优先级,但这一优势未必能在一开始就展现出来,因为计算机是从左至右“逐步运算”的。
例如:
int i=2,x;
x= (++i) + (++i) + (++i);

printf("%d",x);
假设我们一开始就执行所有的++i,答案应当是5+5+5=15,然而实际跑出来的结果却是13。
实际上是因为计算机在运行过程中是先从左边提取到了(++i)+( ++i ),在这个过程中优先执行两个++i,并运行加法 4+4 得到结果 8,再用8+(++i),即8+5=13.
在这个过程中,第三个++i虽然优先级高,但在运行的最初未作用,这就是之前说的并未体现这一优势。
乘法同理。
————————————到这里应该解释清楚了————————————
其实如果我们尝试加一个++i
x=(++i)+(++i )+ (++i)+(++i);
得到的结果是x==4+4+5+6,往后延伸的话应该是+7+8……
所以我们也可以说,并不是后边的++i作用晚了,而是他们只在轮到他们时才会运行。
而最初的(++i)+(++i)纯属意外……他俩只是被一起提出来了。。
如果改写为x=1+(++i)+(++i)+(++i)
结果就是1+3+4+5=13,可见就不存在这一问题,他们全都变成逐一发挥作用的了。
(神奇吧,在 x= (++i) + (++i) + (++i)之前加一个1居然不影响结果,实际都是有理可循的)
——————————————
此篇回答纯属菜鸟教菜鸟,我也刚学编程没两天,如果有错误请各位斧正,勿喷。
from bit