面试复习(四)——C/C++关键字:前置运算和后置运算的区别

偏执的太偏执、 2021-11-05 05:14 211阅读 0赞

一、以++操作为例,对于变量a,

  • ++a表示取a的地址,增加它的内容,然后把值存放到寄存器中;
  • a++表示取a的地址,把值存放到寄存器中,然后增加内存中a的值。

当涉及表达式计算时,这两种方式的区分如下:

++后置:先将其值返回,再增加1;

++前置:先将值增加1,再返回其值。

  1. #include <iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. int a, b, c, d;
  6. a = 10;
  7. b = a++;
  8. c = ++a;
  9. d = 10 * a++;
  10. cout << "a=" << a << "\n" << "b=" << b << "\n" << "c=" << c << "\n" << "d=" << d << "\n";
  11. return 0;
  12. }
  13. ![20190808134224380.png][]

再比如:

  1. 先定义int a=4,然后分别执行以下5种情况:
  1. a+=a++; //结果:9
  2. a+=++a; //结果:10
  3. ++a += a; //结果:10
  4. ++a += a++; //结果:11
  5. ++a += ++a; //结果:12

以a+=a++;为例进行说明:

  1. #include <iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. //i += i++;可以看成是i = i + i++;
  6. int i = 4;
  7. int q = i++;
  8. int w;
  9. cout << "q=" << q << endl;
  10. w = i + q; //先执行q,将+1后的i给i,此时i是5,而q还是4
  11. cout << "q1=" << q << endl;
  12. cout << "i=" << i << endl;
  13. cout << "w = " << w << endl;
  14. return 0;
  15. }

20190808141349379.png

上面的i = i + i++; i++的运算结果并不是i这个变量的引用,而是一个临时变量,其值为i的值4,而i++后的值传给了等号右边第一个i,它的值是5,此时的式子为i = 5 + 4;

注:

1)一般推荐使用前置自增、自减运算,因为前置自增(++i)通常要比后置自增(i++)效率更高。

2)a++不能作为左值,即(a++)+=a;是不对的

这里引入两个概念:

  • 左值:可以出现在表达式左边的值(等号左边),可以被改变,他是变量的地址;
  • 右值:指存储在某内存地址中的数据,也称为变量的数据。

左值可以作为右值,但右值不能作左值。a++不能当左值使用,但++a可以。原因见文章开头“++”操作在不同位置处的作用。

  1. i++的运算结果并不是i这个变量的引用,而是一个临时变量,其值为i的值,所以无法进行i++=5运算,甚至编译器不允许对一个临时变量重新赋值,这会引起编译错误。

发表评论

表情:
评论列表 (有 0 条评论,211人围观)

还没有评论,来说两句吧...

相关阅读