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

还有不到一星期就考试了,急急急!!!希望各位大虾能提供一些典型的题目,例如: *(p+2)**(w+3),等等这样的题目并提供详细的答案,不胜感激,不需要纯理论的,只是想要一些题目,自己思考下,哈哈,谢谢大家了,好的会加分!!!

①虽然你明确要求是题目,但是那些你可以在网络搜索到大量题库(百度文库、豆丁以及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分钟),把不懂的地方根据优先级去分析,就能完全掌握它了
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-12-12
考试,建议去翻阅往年的试题,考题不会出那些个比较刁钻古怪的题的,呵呵。
。。。我看到了,就随便说说,考题我没有= =本回答被网友采纳
第2个回答  2010-12-12
写点代码,多试试就行了,运算符顺序没必要死记.记住常用的就行了.
int a = 1;
if(++a == 2 || ++a = 3 )
a++;
else
--a;
cout<<a<<endl;
第3个回答  2010-12-12
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

C++上的一些运算符顺序的问题:我是C++初学者,对运算符顺序不是很了解...
(其中++和[]都属于后置运算符,而*属于前置运算符)b.赋值运算符永远是最后优先,而倒数第二优先的是逗号运算符.比如 a=1,b++,++c,4; 结果a=4;(但是前面的几个子表达式都先计算了,只是返回最后一个逗号表达式)c.按位逻辑运算符比关系逻辑运算符具有更高优先级:a>b&c 等价于a>(b&c)...

c++运算符的优先级顺序
在C++中,运算符的优先级顺序如下:单目运算符(如取反、取正、下标、成员访问等)乘法运算符(*、\\)加法运算符(+、-)移位运算符(<<、>>、<<、>>)关系运算符(<、>、<=、>=、==、!=)相等运算符(==、!=)按位与运算符(&)按位异或运算符(^)按位或运算符(|)逻辑与运算符...

C++中操作符"|"和"||"是什么意思
| 是“按位或”运算符 ||是“逻辑或”运算符 c++运算符如下:C++的优先级优先级 操作符 结合性 1 :: 左 2 . -> [] () 左 3 ++ -- ~ ! - + & * () sizeof new delete castname_cast<type> 单目操作符 右 4 .* ->* 左 5 * \/ % 左 6 + - 左 7 << >> 左 8 <...

C++新手关于三目运算符这行的疑问
c1=((c1>='a'&&c1<='z'-4)||(c1>='A'&&c1<='z'-4))?c1+4:c1-22

C++中各类运算符的优先级
在C++中,运算符的优先级和结合方向对表达式的计算结果至关重要。各类运算符的优先级可以按照以下直观的顺序理解:首先,括号([]())的运算优先级最高,它们用于界定和改变运算的范围,然后是成员运算符(.和->),用于访问对象的属性和方法。其次,单目运算符(++、--、+\/-、指针运算*、&)占据第...

C语言自加运算符运行优先级问题
、"y=(++x)*(x++)"、"y=++x*(x++)"的不同在于前者表达式中++均是前置的,后者中有前置也有后置++ --两个操作符要求操作数必须是一个左值 前缀形式的++操作符出现在操作数的前面。操作数的值被增加而表达式的值就是操作数增加后的值。后缀形式的++操作符出现在操作数的后面。抽象的说,...

c++运算符的优先级顺序
c语言运算符优先级从高到低的顺序依次如下:优先级从上到下依次递减,最上面具有最高的优先级,逗号操作符具有最低的优先级。表达式的结合次序取决于表达式中各种运算符的优先级。优先级高的运算符先结合,优先级低的运算符后结合,同一行中的运算符的优先级相同。不同类型的运算符之间也有相应的优先级...

有C++基础的进~初学者求救……
其次去模运算是求余数,如 3%2 = 1; 5%2 = 1;再次要知道,y != 0 是指 y不等于0,数学里面学了,0不可以做除数。最后答案:C 针对第五个问题:是自增运算符号 和 优先级的问题 这里需要明白,++在前 和 ++在后的区别,同理--也是一样的, ++在前,要先计算变量本身 再往下计算,...

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

c++各类运算优先级
在C语言中有两个单目和五个双目运算符。 符号 功能 + 单目正 - 单目负 * 乘法 \/ 除法 % 取模 + 加法 - 减法 下面是一些赋值语句的例子, 在赋值运算符右侧的表达式中就使用了上面的算术运算符: Area=Height*Width; num=num1+num2\/num3-num4; 运算符也有个运算顺序问题,先算乘除再算加减。单目正和...

相似回答
大家正在搜