您的位置 首页 > 娱乐休闲

++i 与 i++ 仅是 “先加” 与 “后加” 的差别吗?

抛砖引玉:

关于前置 ++ 与 后置 ++的差别,这似乎再熟悉不过了。前置 ++ 是先将变量的值加1,然后使用加1后的值参与运算;而后置 ++ 是先使用该值参与运算,然后再将值加1。

没错,关于二者之间的差别,的确可以这样认为,并且按照上面操作,运算中基本不会有什么错误。但是,如果我告诉你,后置 ++ 其实与前置 ++一样,在参与运算之前都会将变量的值加1,你相信吗?恩,应该是不信,不过,这是真的…

重点摘要:

对前置 ++ 与后置 ++ 的表面理解

对前置++ 与后置 ++ 的深入理解

前置 ++ 与后置 ++ (面试)

关于前置 ++ 与后置 ++,我们先看一个比较简单的程序。

【例2.3】前置 ++ 与后置 ++ 的质疑

程序代码

程序并不复杂,只是使用了前置 ++ 与后置 ++ 分别对另外一个变量 j 与 自身 i 进行赋值而已,程序运行结果如下:

运行结果

前3个方法的输出应该没有什么好说的,只是最后一个方法postPlusI 的输出有点离奇: i=15

为什么会是15呢?按照通俗的见解,虽然后置 ++ 是先参与运算,然后再将值加1,但是执行对自身的赋值运算后(第31行),值也该加1,变成16才是啊。况且,当后置 ++ 对其他变量(j) 赋值后(第26行),i自然也加1了,并且运行结果也打印出16,为什么对自己赋值后,结果就不一样了呢?

后置 ++ 的自白 (误区) (实现)

实际上,不管是前置 ++,还是后置 ++,都是先将变量的值加1,然后才继续运算的。二者之间真正的区别是:前置 ++ 是将变量的值加1后,使用增加后的变量值进行运算的,而后置 ++ 是首先将变量赋值给一个临时变量,接下来对变量的值加1,然后使用哪个临时变量进行运算。从效果上来说,假如有如下的程序片段:

int i = 2;

int j = ++i * 30;

第2行就相当于:

i += 1; // 将i加1,值为3。

j = i * 30; // 使用加1后的i进行运算,结果j为90。

而如果程序片段为:

int i = 2;

iint j = i++ * 30;

第2行就相当于:

int temp = i; // 将i赋值给一个临时变量,temp值为2。

i += 1; // 将i加1,值为3。

j = temp * 30; // 使用临时变量temp进行运算,结果j为60。

好了,原理已经介绍清楚了,现在就让我们回过头来看【例2.3】。其中第18行,i的初始值为15:

i = ++ i;

这就相当于:

i += 1; // 将i加1,值为16。

i = i;// 使用i对自身赋值,值还是16。

而程序第31行:

i = i++;

这就相当于:

int temp = i; // 将i赋值给一个临时变量,temp值为15。

i += 1; // 将i加1,值为16。

i = temp; // 使用临时变量temp 对i 赋值,结果i值为15。

现在清楚了吧,这就是整个过程。其实后置 ++ 也是先将 i的值加1,只是后来参与运算的不再是i,而是哪个临时变量。

要点总结:

  • 前置 ++ 与后置 ++ 都是先将变量的值加1,而不是前置 ++ 先加1 然后运算,而后置 ++ 先运算后加1

  • 从程序上说,后置 ++ 先将变量赋值给一个临时变量,然后将变量的值加 1,接下来使用哪个临时变量运算。

举一反三

  • 如果一条语句只执行前置 ++ 或者后置 ++ ,例如:

    i++;

    ++i;

那么,这个时候前置 ++ 与后置 ++ 是否完全等价呢? 二者还有什么区别吗?

欢迎码农同学们,讨论起来!

责任编辑: 鲁达

1.内容基于多重复合算法人工智能语言模型创作,旨在以深度学习研究为目的传播信息知识,内容观点与本网站无关,反馈举报请
2.仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证;
3.本站属于非营利性站点无毒无广告,请读者放心使用!

“++i,与,i++,仅是,先加,与,后加,的差别吗,”边界阅读