用户:走尽天涯路)
================================================== 消息组:群/校友录() ================================================== 消息类型:聊天记录 ==================================================
Ricky... “当一个运算对象左右两侧的运算符的优先级相同时,则由运算符的结合性,又称结合方向或互联性确定运算次序”何解?
2 我不知道你现在看的是什么书,不过我觉得C++Primer很好,你可以先多看看这本书
2004-12-18 19:35:06 书没有错,但是通常好书讲得比较透彻,并且会有很好的例子
2004-12-18 19:34:34 77) 哦...看来我的书说错了?
2004-12-18 19:37:35 77) 刚才走尽天涯路说“结合性 是判断 谁属于谁”是这样吗?
2004-12-18 19:38:17 13) C语言中只有少数几个运算符是右结合的,所以当操作数左右两边运算符优先级相同的情况下,多是先算左边的……简单地说:和算术是一样的
2004-12-18 19:39:01 Ricky() A+B+C,先算A+B,然后结果+C,不用弄得太复杂,需要注意的应该是优先级
2004-12-18 19:40:48 走尽天涯路( 没错 前提是不要写 二义性代码
2004-12-18 19:40:57 走尽天涯路( [:D]
2004-12-18 19:41:19 Ricky( 如果再不能保证自己的记忆力足够好的时候,加上括号……
2004-12-18 19:42:33 走尽天涯路(7) 要看看 那本书上是怎么说的吗
2004-12-18 19:42:38 学C新手(7) 要~~~~
2004-12-18 19:45:48 走尽天涯路( a= b+c+d ; 实际情况是 c标准 并没有对此做出明确的规定,在某些平台又或者某些情形下,可能编译器是这样的: a = b+(c+d);
2004-12-18 19:46:22 走尽天涯路() 类似的 例子: a = f( ) + g( );
2004-12-18 19:47:07 走尽天涯路() 编译器 并不保证 f( ) 一定在 g( ) 之前 被求值。
2004-12-18 19:48:51 Ricky( 第一个不正确,算术运算符都是左结合的,所以,一定是先b+c,然后结果+d
2004-12-18 19:49:21 学C新手() [:L]书也能错啊?
2004-12-18 19:49:48 Ricky(1) 当年谭浩强的书就有很多错误
2004-12-18 19:50:20 走尽天涯路() int i = 0; while ( i<10 ) arrayTarger[i] = arraySource[i++];
是想: while ( i<10 ) { arrayTarget[i] = arraySource[i]; ++i;}
2004-12-18 19:51:39 Ricky() 其实只有单目运算符、条件运算符还有赋值是右结合的,其他都是左结合
2004-12-18 19:52:32 走尽天涯路() 虽然i++返回自增前的i值,但问题是某些平台的编译器并不能保证在i自增之前执行取址操作: arrayTarger[i]
2004-12-18 19:53:37 走尽天涯路() Ricky 那个例子 是书上专门提出的
2004-12-18 19:53:59 走尽天涯路( 用的是 c99标准吧
2004-12-18 19:54:06 Ricky(1) 呵呵,如果你不介意的话可以看看Lippman的Essential C++
2004-12-18 19:54:43 走尽天涯路() [:'(]没哪本书,还要去找啊
2004-12-18 19:55:20 学C新手() 你手里好歹有本编译原理,我还要买我这里买书特麻烦
2004-12-18 19:57:05 走尽天涯路() 最后一个例子是89年的 ,不好意思
2004-12-18 19:58:11 走尽天涯路(4) 这本书偏向于 c不知道 c++ 和c一样不
2004-12-18 20:04:19 走尽天涯路( 怎么都不说话了
2004-12-18 20:04:31 走尽天涯路( [?]
2004-12-18 20:04:46 学C新手( [:8]我现在更搞不清楚结合性了... 所谓从右向左结合是指运算符和右边的运算对象结合吗?a**p等价于a*(*p)?????
2004-12-18 20:05:18 走尽天涯路( 等啊
2004-12-18 20:05:47 Ricky( 这个不是运算符,是类型定义,是另外一回事情。 a**p 意味着 p是一个指针,是指向a*类型的指针
2004-12-18 20:05:58 走尽天涯路( 其实我觉得 这本书的意思是 结合性 和运算顺序是两码事
2004-12-18 20:06:31 Ricky( 同样的道理 const int * p,p是指针,指向const int类型 int * const p,p是指针常量,指向int类型
2004-12-18 20:06:39 走尽天涯路( 有联系 但不同
2004-12-18 20:06:58 Ricky( int const * p等同于const int *p
2004-12-18 20:07:07 天堂没有雪( 哈哈
2004-12-18 20:07:15 Ricky( 在实际编程中,遇到的更多是优先级问题
2004-12-18 20:07:20 天堂没有雪( a**p爽吧
2004-12-18 20:07:35 Ricky( 避免写出容易被误会的代码就好了
2004-12-18 20:07:35 学C新手( [:8]不爽
2004-12-18 20:08:23 走尽天涯路( Ricky[:)]
2004-12-18 20:08:42 /kun流星雨( [?]
2004-12-18 20:08:45 Ricky(1 错了请大家指正,:)
2004-12-18 20:08:57 学C新手( a**p 意味着 p是一个指针,是指向a*类型的指针 ----------------------------- int *p; a*(*p)吧?
2004-12-18 20:09:50 天堂没有雪( [strong]
7(走尽天涯路) 20:06:53 这是结合性问题 学C新手) 20:11:09 那位大哥重新把结合性的概念定义一下?我晕死了~~~~~ ( 流星雨) 20:12:11 听听就好 (Ricky) 20:12:12 Sorry,这个就是表达式了,但是同样没有什么疑惑的啊,很明显就是a*(*p),因为取地址运算符的优先级别比算术运算符乘要高 (走尽天涯路) 20:08:41 那本书上说的例子是在 优先机相同情况下 运算顺序的问题 当然不同时 运算顺序 和结合性 与 优先级 有密切关系 (学C新手) 20:14:39 Ricky讲讲结合性吧?我整个的概念被颠覆了 (分别说下一元和二元) Ricky) 20:15:37 结合性本来是个很简单的东西,你自己把它想得太复杂了,想想看算术中是怎么计算表达式的。 (天堂没有雪) 20:18:24 你遇到过:a+b*c这样算吗(a+b)*c就按我们小学数学里的算就行了,干吗搞那么复杂,有些东西是跟你用的环境有关的
(Ricky) 20:19:24 除了单目运算符、条件运算符、赋值运算符以外,其他都是从左到右的。a+b-c,就是先加后减,定义int **p,那么**p = 5;就是*(*p) = 5,先取p指向的那个int指针,然后取该指针的内容,因为*是单目运算符,是先右后左的
(学C新手) 20:22:05 所谓结合性应该就是把运算符和运算对象结合起来? (Ricky) 20:23:42 这里有一个"*",你知道它是乘法还是取内容吗?都要放到具体环境里面的,一开始写代码,吃不准就老老实实添加括号 
|