C++基础---自增自减运算符
2015-08-15 20:27
399 查看
1. 自增自减运算符
1.1 自增自减运算符的定义
自增运算符:++;自减运算符:- -;
自增自减运算符:都是单目运算符, 只能应用于变量,而不能用于常量或表达式。结合性与简单赋值运算符相同,但优先级高于任何双目运算符。
1.2 自增自减运算符均有两种使用形式
前缀形式:即它们在操作数前,如:++x,- -x。后缀形式:即它们在操作数后,如:x++,x- -。
前缀与后缀的表达式独立使用时:结果是没有区别;
++a; //等价于a+=1; 或 a=a+1; a++; //等价于a+=1; 或 a=a+1; --a; //等价于a-=1; 或 a=a-1; a--; //等价于a-=1; 或 a=a-1;
注:作为单一语句,前置与后置自增自减运算符的操作作用是相同的。
前缀与后缀在表达式中被引用时: 结果是不同的;
(1)前置:前置运算符表示在赋值之前先进行自增或自减运算。
例子:先使值加1或减1,然后再取值
int a = 1; cout<<++a; =>2(a的值输出为2) 或: int a = 1; cout<<--a; =>0(a的值输出为0)
(2)后置:后置运算符表示在赋值之后再进行自增或自减运算。
例子:先取值,然后再使值加1或减1
int a = 1; cout<<a++; =>1(a的值输出为1) cout<<a ; =>2(a的值输出为2) 或: int a = 1; cout<<a--; =>1(a的值输出为1) cout<<a ; =>0(a的值输出为0)
注:作为表达式的结果,前置返回的是左值,后置返回的不是左值。
1.3 自增自减运算操作
前增量、后增量操作正确性判别const int e = 8; e++; //错:e是常量,值不能修改 8++; //错:8不是左值 int a = 3; int b = ++a;//对:a的值为4,b的值为4,相当于(a=3;) ++a;(a=4;) b=a; int c = a+1;//对:a的值为4,c的值为5,a的值没发生自增或自减 int d = a++;//对:d的值为4,a的值为5,相当于b=a; a++; a++ -= 2;//错:a++不是左值 ++a += 5;//对:++a是左值,a的值为11,相当于(a=5;) ++a;(a=6;) a+=5 ++(++a);//对:++a为左值,可执行++(++a)操作 ++a++;//错:按优先级即++(a++),而a++非左值,不能做前置增量操作
1.4 自增自减操作符识别
++与- -是连体操作符: 如果分开写,则成两个独立的+或-了,所以中间不能有空格。如果有多于两个的+或-连写,则编译器按”贪吃法则“理解。所谓贪吃,是指只要能理解能成为操作符,就尽量多读入字符。int a=1, b=5, c; c=a + b;//对:c=6 c=a ++ b;//错:a++和b是两个表达式,缺互相运算的操作符 c=a +++ b;//对:a++ + b c=6 c=a ++++ b;//错:a++和++b是两个表达式,缺互相运算的操作符 c=a +++++ b;//错:a++ ++ +b,a++非左值,不能再进行++操作 c=a +++ b++;//对:a++ + b++,c=6 c=++a + b;//对:++a + b c=7 c=++a ++ b;//错:++a非左值,不能再进行++操作 c=++a +++ b;//错:++a非左值,不能再进行++操作
1.5 使用自增自减操作符的注意事项
表达式的值和变量值的区别:以自增运算符为例,当自增运算符++作用于一个变量时,
例如:当 i = 3 时, cout<<++i<<endl; 这个算术表达式的输出值为4,同时变量i的值也由原来的3改变为4。 cout<<i++<<endl; 这个算术表达式的输出值为3,但变量i的值由原来的3改变为4。
注:一般情况下,计算表达式后不改变变量的值,而自增自减运算符和运算符组成的表达式计算后,则改变变量的值,这称为运算符的副作用,这种运算符在计算表达式时,一定要注意区分表达式的值和变量的值。
前缀运算和后缀运算的区别:前缀运算是“先变后用”,而后缀运算是“先用后变”。
运算符的运算对象:自增自减运算符能作用于变量 , 而不能作用于常量或表达式。
注:因为自增自减运算符具有对运算量重新赋值的功能 , 而常量、表达式无存储单元可言。
运算符的结合方向:自增自减运算符的结合方向都是从右向左。
注:当自增自减运算符所在的表达式或语句中只含一种操作时(即单一表达式),则其前缀和后缀功能对程序的作用时一样的;而当含有两个或两个以上操作时,在考虑各个运算符的优先级别和结合性的基础上,则其前缀和后缀的功能对程序的作用时不一样的。
(1)为了提高程序的效率,需要用技巧把程序写得尽可能简洁一些,但这样有可能降低和谐的可能性和可理解性。
(2)可读性差的程序容易隐藏错误且难于纠正 ,不易维护,降低了程序的可靠性。
(3)人们在程序设计时遵守的基本规范是:可靠性第一,效率第二。为了保证可靠性,程序必须清晰易读,而表达式的清晰易读是十分重要的,因此,在程序设计中要慎重。
参考文献:
[1]《C++全方位学习》范磊——第五章
[2]《C++程序设计教程(第二版)》钱能——第四章
[3] 百度搜索关键字:C++运算符、增量操作、自增自减操作符、前置与后置自增自减操作符
相关文章推荐
- C++中cin.getline()、getline()、cin.get()区别
- 贪心算法之Evil Straw Warts Live
- C++容器之Vector
- C++之const
- C++之友元
- C语言中函数参数入栈的顺序 - Fangzhen - 博客园
- C++基础---三目运算符
- C++引用详解
- C++虚函数
- C++ Primer : 第九章 : vector变长、string的其他操作以及容器适配器
- C++基础---运算符
- Binary Tree Level Order Traversal
- 函数的重写,重载
- 一起talk C栗子吧(第三十六回:C语言实例--螺旋矩阵)
- 选择排序(C++版)
- [LeetCode] 032. Longest Valid Parentheses (Hard) (C++)
- A*算法
- 排序算法_C++(二)插入排序之折半插入排序
- Trie树 c++实现
- C语言各章节的难易程度