对增值操作符++和减值操作符--的讨论

版权声明:点个赞再走叭! https://blog.csdn.net/weixin_42822164/article/details/85244716

这两个操作符都有两个变型,分别为前缀形式和后缀形式。两个操作符的任一变种都需要一个变量而不是表达式作为它的操作数。实际上,这个限制并非那么严格。这个操作符实际只要求操作数必须是一个“左值”,但目前我们还没有讨论这个话题。这个限制要求++或–操作符只能作用于可以位于赋值符号左边的表达式。 前缀形式的++操作符出现在操作数的前面。操作数的值被增加,而表达式的值就是操作数增加后的值。后缀形式的++操作符出现在操作数的后面。操作数的值仍被增加,但表达式的值是操作数增加前的值。如果你考虑一下操作符的位置,这个规则很容易记住——在操作数之前的操作符在变量值被使用之前增加它的值;在操作数之后的操作符在变量值被使用之后才增加它的值。–操作符的工作原理与此相同,只是它所执行的是减值操作而不是增值操作。 这里有一些例子。

int a, b, c, d;
...
a = b = 10;      //a和b得到值10
c = ++a;        //a增加至11,c得到的值为11
d = b++;        //b增加至11,但d得到的值仍为10 

上面的注释描述了这些操作符的结果,但并不说明这些结果是如何获得的。抽象地说,前缀和后缀形式的增值操作符都复制一份变量值的拷贝。用于周围表达式的值正是这份拷贝(在上面的例子中,“周围表示式”是指赋值操作)。前缀操作符在进行复制之前增加变量的值,后缀操作符在进行复制之后才增加变量的值。这些操作符的结果不是被它们所修改的变量,而是变量值的拷贝,认识这一点非常重要。它之所以重要是因为它解释了你为什么不能像下面这样使用这些操作符: ++a = 10; ++a的结果是a值的拷贝,并不是变量本身,你无法向一个值进行赋值。

猜你喜欢

转载自blog.csdn.net/weixin_42822164/article/details/85244716