第三题为什么m等于6?括号的优先度不应该是大于赋值吗?这道题为什么选择先赋值再自增?

2025-04-27 06:39:32
推荐回答(3个)
回答1:

我算出来的结果是,「m为7,k为7,i为4」,运行出来的结果也是「y=7,4」。你看看吧。不过这种一连串的自增自减自乘的运算,不同的操作系统、不同的编译器可能会得出不同的结果哦!

我的解释是:首先做最右边的「i*=k++;」,这里是先取k的值,再对k做自加1,所以这里的计算是「i = i * k = 2 * 2 = 4,」,计算结束之后,i 的值为4,k自加1值变为3。接着向左边运行,做「k+=i;」,也就是「k = k + i ;」,所以「k = 3 + 4 = 7」,所以 k 的值变为7 , i 的值仍然是 4 。最后,再把 k 的值 赋值给 最左边的 m,于是 m 的值 为 7。

下面两张运行的截图可以看到有没有小括号,结果都是一样的。

你可以在你的电脑和编译器里试试,看看有没有区别。正如上面最开头说的,不同的操作系统、编译器出来的结果可能不同,最关键的原因就在于不同的编译器对于这么一长串的自增自减自乘、赋值的运算顺序,有可能是在第一个等号的右边从右向左,也有可能是从左向右。

(如有帮助,烦请采纳,谢谢!)

回答2:

因为k++呀,
k++是在有这个的这个算式中先使用k,再自增1及k=k+1。
++k是先自己加1,再使用。

回答3:

k++;
k=2;
i*k = 2*2 =4;
k+=4;相当于k=k+4;且立即计算
k = 2+4 =6;