递增++,递减--。一体两面, 你真的了解不?

无极跬步,无以至千里!一个程序员的路能走多远,取决于你的基础功夫到底扎实与否。

最近在学习c++,有java基础。但是在系统学习c++的时候,发现对于java来说很多东西都似曾相识,但是也有很多东西似懂非懂。就拿递增递减来说,为什么i++,++i得到的值不同?为什么有时候又是可以通用呢?

这里我说明一下,很多博客经过多番转载别人的文章,不能说误导,也不能说讲明了其中的理由。我是一个喜欢以拟人的方式进行学习,变成的任何对象也好,还是说个体也罢都是离不开大自然的。废话说了这么多进入正题。

1、【i++,++i】粗犷理解

同一时候的两种不同的表现形式。怎么理解这句话?买菜的时候,我先付款提菜或者说先拿菜再付款。两种方式都可以对吧。但是在于一些特定情况下,比如你到网上订票,肯定是先付款,然后才能出票。

两者都是先自己加1,至于什么时候使用到原始值,什么时候使用副本,要根据具体情况而定。

首先从字面义上理解:程序都是从右至左,从上到下的运行。

这里先片面理解为(广大转发党的描述):

后缀i++:先使用i本身的值,后面的语句才使用到副本i的值;

前缀++i;直接使用副本。

2、【深入理解i++,++i】

什么时候以上的说法是正确的呢?先记住这样一句话。它必须是一个完整的表达式,而不是一个更大表达式的子表达式。否则前缀或者后缀的使用情况是一样的。

我们先写个例子:

int i = 5;
int s=(9+i++)+(++i);  //结果应该为:21  

接着我们在看一个例子

#include 
using namespace std;
int main() {
	int i = 5;
	for (i; i < 10; i++) { //变化
		cout << i<< endl;
	}
	return 0;
}

输出的结果为:5,6,7,8,9

我们再变一下:

#include 
using namespace std;
int main() {
	int i = 5;
	for (i; i < 10; ++i) {//变化
		cout << i<< endl;
	}
	return 0;
}

输出的结果为:5,6,7,8,9

咦,为什么结果一致呢?前面我们说过,完整的表达式的定义:不是另一个更大的表达式的子表达式。

否则他们的效果就一样。那么为什么在1.0中的表达式却能和我们理解的一样呢?我们再次把红色字体感受一下。1.0中的例子是一个整体的表达式,而循环体中的表达式是这个整体中的子表达式。

这里来源于c++中的体悟。至于后续对此有什么不同的感悟再更新,对此各位有什么见解也可以给我留言,一起探讨。

你可能感兴趣的:(c++,蓝桥杯,开发语言)