【C++语言】彻底搞懂++i和i++

目录

 

1 概念

2 前缀递增示例

2.1 示例代码

2.2 解题思路

3 后缀递增示例

3.1 示例代码

3.2 解题思路

4 混合表达式示例

4.1 示例代码

4.2 解题思路


1 概念

++是单目运算符:++i是前缀递增,先参与表达式运算,然后再自增;i++是后缀递增,表示先进行递增,然后再参与表达式运算。

2 前缀递增示例

2.1 示例代码

#include<iostream>
using namespace std;
int main(int argc, char* argv[])
{
	int a = 10;
	int b = 0;
    b = a++;
	cout << "b = " << b << endl;
	cout << "a = " << a << endl;

	system("pause");
	return 0;
}

2.2 解题思路

解题过程中,为了方便理解,分别用两个盒子来表示变量a和变量b;

第一步:初始时,a的值为10,b的值为0

第二步:b = a++; 此时的a++为后缀递增,因此a++先参与表达式的运算,也就是把a的值赋给b,此时b的值也就是10;

第三步:然后再进行自增运算a = a + 1 = 10 + 1 = 11;

第四步:

      输出结果:

            b = 10 

            a = 11

3 后缀递增示例

3.1 示例代码

#include<iostream>
using namespace std;
int main(int argc, char* argv[])
{
	int a = 10;
	int b = 0;
    b = ++a;
	cout << "b = " << b << endl;
	cout << "a = " << a << endl;

	system("pause");
	return 0;
}

3.2 解题思路

解题过程中,为了方便理解,分别用两个盒子来表示变量a和变量b;

第一步:初始时,a的值为10,b的值为0

第二步:b = ++a; 此时的++a为前缀递增,因此++a先进行自增,a = a + 1 = 10 + 1 = 11

 

第三步:然后再把a的值赋给b

 

第四步:

      输出结果:

            b = 10 

            a = 11

4 混合表达式示例

4.1 示例代码

#include<iostream>
using namespace std;
int main(int argc, char* argv[])
{
	int a = 10;
    int b = 5;
	int c = 0;
    c = a++ + b++ + ++a + ++a + ++b;
	cout << "b = " << b << endl;
	cout << "a = " << a << endl;
    cout << "c = " << c << endl;

	system("pause");
	return 0;
}

4.2 解题思路

解题过程中,为了方便理解,分别用三个盒子来表示变量a,变量b和变量c;

第一步:初始时,a的值为10,b的值为5,c的值为0

第二步:c = a++ + b++ + ++a + ++a + ++b; 表达式中有三个操作符++操作符,+操作符和=操作符。其中,++操作符优先级最高,其次+操作符,最后是=操作符。

再根据同等优先级的操作数,自左向右运算的规则,一步一步拆解表达式。先计算优先级高的++操作符:

(1)先计算最左边的a++

        由于是后缀递增,先参加表达式计算,再进行自增;表达式拆解为:

c = a + b++ + ++a + ++a + ++b;
a = a + 1;

                此时a,b,c盒子的值保持不变。

(2)再计算b++

          由于是后缀递增,先参加表达式计算,再进行自增;表达式拆解为:

c = a + b + ++a + ++a + ++b;
a = a + 1;
b = b + 1;

                  此时a,b,c盒子的值保持不变。

(3) 计算接下来的++a

          由于是前缀递增,先进行自增,a = a + 1 = 10 + 1 = 11,再参与表达式计算。此时a盒子的值发生了变化

 

          表达式变为:

c = a + b + a + ++a + ++b;
a = a + 1;
b = b + 1;

(4)计算接下来的++a

         由于是前缀递增,先进行自增,a = a + 1 = 11 + 1 = 12,再参与表达式计算。此时a盒子的值发生了变化

 

         表达式变为:

c = a + b + a + a + ++b;
a = a + 1;
b = b + 1;

(5)计算后一个++b

         由于是前缀递增,先进行自增,b = b + 1 = 5 + 1 = 6,再参与表达式计算。此时b盒子的值发生了变化

 

         表达式变为:

c = a + b + a + a + b;
a = a + 1;
b = b + 1;

第三步:接下来计算+操作符,此时a的值为12,b的值为6,则a + b + a + a + b = 12 + 6 + 12 + 12 + 6 = 48; 

表达式变为:

c = 48;
a = a + 1;
b = b + 1;

第四步:最后进行优先级最低的=操作符运算。将48赋值给c

 

此时表达式剩下:

a = a + 1;
b = b + 1;

 

第五步:执行a = a + 1的自增运算,a = 12 + 1 = 13;

第六步:执行b = b + 1的自增运算,b = 6 + 1 = 7

 

第七步:

      输出结果:

            b = 7

            a = 13

           c = 48

 

  • 22
    点赞
  • 87
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值