面试复习(四)——C/C++关键字:前置运算和后置运算的区别
一、以++操作为例,对于变量a,
- ++a表示取a的地址,增加它的内容,然后把值存放到寄存器中;
- a++表示取a的地址,把值存放到寄存器中,然后增加内存中a的值。
当涉及表达式计算时,这两种方式的区分如下:
++后置:先将其值返回,再增加1;
++前置:先将值增加1,再返回其值。
#include <iostream>
using namespace std;
int main()
{
int a, b, c, d;
a = 10;
b = a++;
c = ++a;
d = 10 * a++;
cout << "a=" << a << "\n" << "b=" << b << "\n" << "c=" << c << "\n" << "d=" << d << "\n";
return 0;
}
![20190808134224380.png][]
再比如:
先定义int a=4,然后分别执行以下5种情况:
- a+=a++; //结果:9
- a+=++a; //结果:10
- ++a += a; //结果:10
- ++a += a++; //结果:11
- ++a += ++a; //结果:12
以a+=a++;为例进行说明:
#include <iostream>
using namespace std;
int main()
{
//i += i++;可以看成是i = i + i++;
int i = 4;
int q = i++;
int w;
cout << "q=" << q << endl;
w = i + q; //先执行q,将+1后的i给i,此时i是5,而q还是4
cout << "q1=" << q << endl;
cout << "i=" << i << endl;
cout << "w = " << w << endl;
return 0;
}
上面的i = i + i++; i++的运算结果并不是i这个变量的引用,而是一个临时变量,其值为i的值4,而i++后的值传给了等号右边第一个i,它的值是5,此时的式子为i = 5 + 4;
注:
1)一般推荐使用前置自增、自减运算,因为前置自增(++i)通常要比后置自增(i++)效率更高。
2)a++不能作为左值,即(a++)+=a;是不对的
这里引入两个概念:
- 左值:可以出现在表达式左边的值(等号左边),可以被改变,他是变量的地址;
- 右值:指存储在某内存地址中的数据,也称为变量的数据。
左值可以作为右值,但右值不能作左值。a++不能当左值使用,但++a可以。原因见文章开头“++”操作在不同位置处的作用。
i++的运算结果并不是i这个变量的引用,而是一个临时变量,其值为i的值,所以无法进行i++=5运算,甚至编译器不允许对一个临时变量重新赋值,这会引起编译错误。
还没有评论,来说两句吧...