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

还有不到一星期就考试了,急急急!!!希望各位大虾能提供一些典型的题目,例如:*(p+2)**(w+3),等等这样的题目并提供详细的答案,不胜感激,不需要纯理论的,只是想要... 还有不到一星期就考试了,急急急!!!希望各位大虾能提供一些典型的题目,例如: *(p+2)**(w+3),等等这样的题目并提供详细的答案,不胜感激,不需要纯理论的,只是想要一些题目,自己思考下,哈哈,谢谢大家了,好的会加分!!! 展开
 我来答
Monkey家园
2010-12-12 · TA获得超过5638个赞
知道大有可为答主
回答量:1134
采纳率:60%
帮助的人:641万
展开全部
①虽然你明确要求是题目,但是那些你可以在网络搜索到大量题库(百度文库、豆丁以及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分钟),把不懂的地方根据优先级去分析,就能完全掌握它了
ksksfgx521
2010-12-12
知道答主
回答量:36
采纳率:0%
帮助的人:15万
展开全部
考试,建议去翻阅往年的试题,考题不会出那些个比较刁钻古怪的题的,呵呵。
。。。我看到了,就随便说说,考题我没有= =
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
忆往昔知来者
2010-12-12
知道答主
回答量:27
采纳率:0%
帮助的人:0
展开全部
写点代码,多试试就行了,运算符顺序没必要死记.记住常用的就行了.
int a = 1;
if(++a == 2 || ++a = 3 )
a++;
else
--a;
cout<<a<<endl;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zming111222
2010-12-12 · TA获得超过156个赞
知道小有建树答主
回答量:205
采纳率:0%
帮助的人:176万
展开全部
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
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式