C++上的一些运算符顺序的问题:我是C++初学者,对运算符顺序不是很了解,希望各位大虾帮帮忙,就快考试了,急急

作者&投稿:阿昭 (若有异议请与网页底部的电邮联系)
①虽然你明确要求是题目,但是那些你可以在网络搜索到大量题库(百度文库、豆丁以及P2P软件、迅雷等等资源中获取,关键字为:C++ 习题集 习题 试题 试卷 参考答案),我仍然会强调一下运算符的实践阶段的理论问题。

②运算符跟操作数有关,所以必须先搞清楚各种类型(基本类型、指针、引用、对象)和重载。

③如果已经清楚②,那么还有一些极为重要的技巧:
a.后置运算符总是比前置运算符先结合(毫无例外)
比如 *a++ 等价于 *(a++)
*a[5] 等价于 *(a[5])
(其中++和[]都属于后置运算符,而*属于前置运算符)

b.赋值运算符永远是最后优先,而倒数第二优先的是逗号运算符.
比如 a=1,b++,++c,4; 结果a=4;(但是前面的几个子表达式都先计算了,只是返回最后一个逗号表达式)

c.按位逻辑运算符比关系逻辑运算符具有更高优先级:
a>b&c 等价于a>(b&c)

d.还有一个概念要很明白:左值和右值的区别。
a=1; a是左值,1是右值 赋值运算符的左边必须是变量,而不是值。
(++a)=1; 是会报错的。

④你有两种方法完全掌握C++的运算符问题:
1.必要性逻辑:C++是一门几乎理论上完美的语言,创造它的人是理论和实践的顶级牛人,那么,所有运算符的逻辑顺序必须是往最合理的那个方向去思考:怎样才最符合严谨的语法和使用?
比如你提到的*(p+2)**(w+3), 你会发现,这种语法初看奇怪,实际上必须是左右都是【指针解引用】后再相乘。否则没有其它合理的语法结合性了。

2.记特例:虽然优先级列表有一面(书最后都会列出优先级列表),但是普遍的规则你是知道的,你只需要把其中的你认为很奇怪的优先级顺序记住,下次只要符合你习惯的,都正常做题,由于不符合你习惯的少部分规则,你已经特意记忆了,等于你就解决了所有优先级的问题。

⑤最后,你在吸收以上内容后,再次去做题+复习优先级列表,反复这样,5天每天做20道(估计最多每天10-25分钟),把不懂的地方根据优先级去分析,就能完全掌握它了

考试,建议去翻阅往年的试题,考题不会出那些个比较刁钻古怪的题的,呵呵。
。。。我看到了,就随便说说,考题我没有= =

写点代码,多试试就行了,运算符顺序没必要死记.记住常用的就行了.
int a = 1;
if(++a == 2 || ++a = 3 )
a++;
else
--a;
cout<<a<<endl;

1.运算符和其优先级

优先级 运算符 结合律











列 ( ) [ ] -> . 从左至右
! ~ ++ -- (类型) sizeof + - * & 从右至左
* / % 从左至右
+ - 从左至右
<< >> 从左至右
< <= > >= 从左至右
== != 从左至右
& 从左至右
^ 从左至右
| 从左至右
&& 从左至右
|| 从右至左
?: 从右至左
= += -= *= /= %= &= ^= |= <<= >>= 从左至右

在C++程序设计语言中说 ++的后增(减)量(lvalue++)的优先级大于*。前增(减)量(++lvalue)和*的优先级相同。

*p++的意思是*(p++),不是(*p)++。

这样区别来对待前增量和后增量:y=++x相当于y=(x+=1),而y=x++相当于y=(t,x+=1,t)这样的区别看起来相当不错。

2.什么是左值?
左值(lvalue)是可以被赋值的表达式。左值位于赋值语句的左侧,以其相对的右值(rvaule),则位于赋值语句的右侧。每条赋值语句都必须有一个左值和一个右值。左值必须是内存中一个可存储的变量,而不能是一个常量。
左值能够存储表达式的结果:++x的结果存储在x中所以它是左值。x++的结果不是放在x中的值,所以它不是左值。
右值是不可取址的,如常量,函数返回值,类型转换结果;
int& u(); 它返回的是左值,(a=4)=28; //a=4是左值表达式。
3.求值顺序
在一个表达式里,子表达式的求值顺序是没有定义的。特别的是,你不能假定表达式从左向右求值。 int x=f(3)+g(7) 没有定义 f(),g()哪个先调用。
int i=1; v[i]=i++;
结果也是没有定义的或者是v[1]=1,或者是v[2]=1。
但是有三种运算符的计算顺序是有定义的:逗号(,),逻辑与(&&),逻辑或(| |)。它们保证了左边的运算对象一定要先于右边的运算对象计算。如:b=(a=2,a++)计算后把3赋给b。&&只有在第一个运算对象为true时才算第二个。| |只有在第一个运算对象是false时才算第二个,这叫短路求值。
注意区分逗号的两种用法:
f1(v[i],i++) 两个参数;
f2( (v[i],i++) ) 逗号表达式;
对于f2来说参数只有一个相当于i++。

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/cxyol/archive/2006/03/16/625713.aspx

指向运算符的理解,希望哪位大侠帮下忙啊~

什么东东,你指的是->这个运算符吗?这个运算符很简单,他只是适合于使用指针来访问类或者结构中的成员变量,成员函数等成员时才使用。用处就只有这么一点,如果你是使用类的对象,或者结构的变量来访问其中的成员时,就使用.点运算符,->运算符没什么别的用处。作个例子吧,比如有结构A ma; A *p=&ma;其中A是struct结构类型的,其中有成员变量i,那么在使用ma和p访问这个成员变量i的方法就是ma.i和p->i;只有在使用指针来访问成员时才会用到->运算符,一般情况下是用不到的。

运算符 描述
. [] () 域访问、数组下标和函数调用
++ -- - ~ ! delete new typeof void 一元运算符、返回数据类型、对象创建、未定义的值
* / % 乘、除、取模
+ - + 加、减、字符串连接
> >>> 位移动
>= instanceof 小于、小于等于、大于、大于等于、instanceof
== != === !== 相等、不相等、恒等、不恒等
& 按位“与”
^ 按位“异或”
| 按位“或”
&& 逻辑“与”
|| 逻辑“或”
?: 条件
= oP= 赋值、带操作的赋值
, 多重求值
表达式 ┃优先级
————————————————————————————╂————
()(小括号) [](数组下标) .(结构成员) ->(指针型结构成员)┃ 最高
————————————————————————————┃ ↑
!(逻辑非) .(位取反) -(负号) ++(加1) --(减1) &(变量地址)┃ │
————————————————————————————┃ │
*(指针所指内容) type(函数说明) sizeof(长度计算) ┃ │
————————————————————————————┃ │
*(乘) /(除) %(取模) ┃ │
————————————————————————————┃ │
+(加) -(减) ┃ │
————————————————————————————┃ │
>(位右移) ┃ │
————————————————————————————┃ │
(大于) >=(大于等于) ┃ │
————————————————————————————┃ │
==(等于) !=(不等于) ┃ │
————————————————————————————┃ │
&(位与) ┃ │
————————————————————————————┃ │
^(位异或) ┃ │
————————————————————————————┃ │
|(位或) ┃ │
————————————————————————————┃ │
&&(逻辑与) ┃ │
————————————————————————————┃ │
||(逻辑或) ┃ │
————————————————————————————┃ │
?:(?表达式) ┃ │
————————————————————————————┃ │
= += -=(联合操作) ┃ │
————————————————————————————┃ │
,(逗号运算符) ┃ 最低

c语言运算符的作用顺序是怎样的?
答:2、效率不同 比如i=3,b=i++就是说b=3,完成之后让i变成4,b=++i就是先让i++变成4,然后b=4,其中++i比i++效率要高些。一般来说在循环域里面,这两者并没有什么很大的区别,但是要注意其生存周期,以及i值在程序流中的变化。C语言运算符的特点 1、C语言是一个有结构化程序设计、具有...

SQL server 2005 问题 运算符优先级问题
答:如果优先等级相同,则按照从左到右的顺序进行运算。(1)括号:();(2)乘、除、求模运算符:*,/,%;(3)加减运算符:+,-;(4)比较运算符:=,>,<,>=,<=,<>,!=,!>,!<;(5)位运算符:^,&,|;~(6)逻辑运算符:NOT;(7)逻辑运算符:AND;(8)逻辑运算符:OR。(9)赋值最低 ...

c语言的运算符先后顺序有什么规定?
答:||a || b + c && b - c = a || ((b + c) && (b - c))= 3 || ((4 + 5) && (4 - 5))= 3 || 1 = 1 按照优先级,先加减运算,后逻辑运算 而逻辑运算的几个操作数都是非0的,可以认为是1 因此最终结果为逻辑1 ...

C语言运算符优先级顺序是怎样的?
答:C语言运算符优先级顺序如下所示:自增运算符 ++ 和自减运算符 --,在作后缀运算符(如表达式 x++)时,较其用作前缀运算符(如表达式 ++x)时,具有较高的优先级。+、-、* 和 & 运算符记号不但可以当作一元运算符(unary operator,只需要一个操作数),也可以当作二元运算符(binary operator,...

c语言运算符的优先级顺序
答:1、括号运算符 括号运算符具有最高的优先级,它可以改变其他运算符的优先级顺序。使用括号可以明确表达式的计算顺序。2、一元运算符 一元运算符包括正号+、负号-、递增运算符++、递减运算符--、取地址运算符&、取值运算符*等。一元运算符优先级高于二元运算符,并且从右到左结合。3、算术运算符 算术...

c语言运算符有关的问题
答:这个地方不是"运算顺序"的问题,C语言语法里根本没有规定求值顺序,有的只是运算符的优先级和结合性 由运算符优先级和结合性可知,以上表达式分别等效于 1.d=((m=(a!=b))&&(n=(b>c)))2. x=(((y--)<=x)||((x+y)!=z))3. ((x++)-y)+(++y)4. ((x<y)?x:y)==(z++)5....

运算符的前后顺序不同会产生什么影响吗?
答:1、运算符类型不同:i++使用的是后置自增运算符,++i使用的是前置自增运算符,i--使用的是后置自减运算符,--i使用的是前置自减运算符。递减操作符是“--”,意为“减少一个单位”;递增操作符是“++”,意为“增加一个单位”。2、运算规则不同:++i表示,i自增1后再参与其它运算;而i++...

c语言逗号运算符优先级问题:先执行++?
答:把结果9赋值给d,所以得到d是9;②第二个表达式e++,刚才分析过了,这个后自增最后执行,此时什么也不会做 ;③e+9=0+9=9,这仅仅是做了一个加法,而且得数(9)都没有保留!最后,e再自增为1。所以,输出的结果是:d为9,e为1。有什么问题请留言。

c++运算符的优先级顺序
答:=)相等运算符(==、!=)按位与运算符(&)按位异或运算符(^)按位或运算符(|)逻辑与运算符(&&)逻辑或运算符(||)条件运算符(?:)赋值运算符(=、+=、-=、*=、/=、%=、&=、^=、|=)说明:同一优先级的运算符,运算次序由结合方向所决定。需要注意的是,C++中的运算符优先级是...

运算符优先级的顺序是什么?
答:当从键盘上输入6时,x=6,x++表达式的值为6,接着x自加1,即x=7,故x++=6>5成立,输出x的值7;当从键盘上输入4时,x=4,x++表达式的值为4,接着x自加1,即x=5,故x++=4>5不成立,输出x--(后置运算),所以先输出x的值5,之后再进行自减1操作。i++ 和 ++i 是不一样的。这...