c语言运算符结合性

运算符的结合性是自右向左 是什么意思?
就是先和运算符右边的数据做运算 然后 在和左边的数据做运算 是这个意思吗?
那么*x++ 和*(x++) 的效果一样吗

效果是不一样的。要想搞清楚这个问题。就必须先弄懂运算符的优先级问题,然后再清楚++符号在左边在在右边的区别。
在你举的例子中,*的级别低于()的级别,所以计算机在运行结果的时候就先计算括号里面的。然后再考虑你从左到右的计算。
再次就是要弄清楚符号++在左在右的问题。
在左是先加1,在X值上加1再运算该表达式的值,在右是先用该值进行计算表达式,然后再是在X值上加1.
不懂可以多问问,希望能帮助你更多!
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-05-15
1L 脱壳期的蛹 错误,将x指针指向的变量自增的表达式应该是(*x)++。

2L shorker 不确切,所有单目运算符优先级相同,无论++是在左边还是在右边。

优先级相同时,结合性规则才有效。由于*和++优先级相同,且为右结合性,*x++和*(x++)等价。
可以说,结合性规则在具有多个优先级相同的运算符的表达式中指定了一种新的临时的优先级规则,以便确定运算顺序(所以 LS 引用的资料里面说“后缀 ++ 和 -- 操作符本质上比前缀一目操作的优先级高”——像++x--这样等价于++(x--))。
另外要注意,ISO/IEC C标准没有规定求值顺序。例如(*(++p))-(++(*p))先计算减数还是先被减数,是不确定的,和实现(编译环境)有关。所以说先和……计算,后和……计算这种思路也是不确切的。
通俗地说,结合性规则只是确定表达式中相同优先级运算符的一些子表达式中,括号具体加在哪个上面。至于加上括号以后互不嵌套的子表达式具体先计算哪一个,从语言的规则本身是无法确定的。
====
[原创回答团]

参考资料:原创

第2个回答  2010-05-15
是啊,就是先和右边的,再和左边的。
你举的那两个例子是这样的:
*X++是将X指针指向的变量加1
*(X++)是将X指针加1(是地址加一个存储单位)然后取指向的空间里的值。
第3个回答  2010-05-15
效果一样,自右向左是指从右边向左边运算
第4个回答  2010-05-15
后缀 ++ 和 -- 操作符本质上比前缀一目操作的优先级高, 因此 *p++ 和 *(p++) 等价, 它自增 p 并返回 p 自增之前所指向的值。要自增 p 指向的值, 使用 (*p)++, 如果副作用的顺序无关紧要也可以使用 ++*p。

参考资料:

本回答被提问者采纳

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网