在c/c++语言中,变量的自增和自减经常被使用到,所以今天就来个详细讲解。本次讲解用到的语言是c语言,在c++中的原理也是一样的。
变量自增自减分为四种情况,每种情况的结果都有所差异,四种情况分别为前置++、后置++、前置--、后置--。下面我们就详细对这四种情况进行学习。
1、前置++
写法:++i
就是把++操作符放在变量的前面,那怎么用呢,我们就以代码的形式展示。
int i = 2;
printf("%d\n",++i);
printf("%d\n", i);
我们看上面的代码,定义了一个变量i,如果分别打印++i和i的结果,那铁子们思考一下结果是什么呢?思考出来了就看下面编译器的结果,是不是跟你想的一样呢?
结果为什么是这样?要想知道,那我们就先搞清楚++i是什么原理?
++i,这条代码其实编译器做了两步操作,是哪两步操作呢。
int i = 2;
//++i的两步操作
(++i) = i + 1;
i = i + 1;
所以编译器看到++i操作之后,会先让(++i)的结果等于 i + 1,然后i = i + 1;这两步执行完了之后就相当于++i执行完了。所以大家看到这里,就知道了++i这个操作的原理了吧,也知道上面的代码结果为什么是3、3了吧。
有了++i的基础了,其他三种情况也大差不差的。
2、后置++
写法:i++
我们就直接上代码。
这个代码和上面的代码一样,只是把++i变成了i++,为什么结果就变了呢。
其实编译器看到i++这个操作之后,内部也会去执行两个操作。
//i++的两步操作
(i++) = i;
i = i+1;
编译器看到i++操作之后,会先让(i++)的结果等于 i ,然后i = i + 1;这两步执行完了之后就相当于i++执行完了。所以上面代码的结果为2、3。
3、前置--
写法:--i
这里--i和++i是一样的原理,只是把自增变成了自减。我们也来看看编译器是如何执行的吧。
//--i的两步操作(--i) = i - 1;i = i - 1;
编译器看到--i操作之后,会先让(--i)的结果等于 i -1,然后i = i - 1;这两步执行完了之后就相当于--i执行完了。所以上面代码的结果为1、1。
4、后置--
写法:i--
这里i--和i++是一样的原理,只是把自增变成了自减。我们也来看看编译器是如何执行的吧。
//--i的两步操作(i--) = i;i = i - 1;
编译器看到i--操作之后,会先让(i--)的结果等于 i ,然后i = i - 1;这两步执行完了之后就相当于i--执行完了。所以上面代码的结果为2、1。
上面四种情况中,我们都把++i、i++、--i、i--可以看成一个表达式进行处理,如果代码为int i = 2;int a = ++i;代码中a的值为(++i)表达式的值,而这个值又是变量i进行操作之后的值。
前置++、前置--: 变量先自增或自减,然后把变量的值赋给表达式。
后置++、后置--: 先把变量的值赋给表达式,然后变量自增或自减。