运算符的结合性是自右向左 是什么意思?
就是先和运算符右边的数据做运算 然后 在和左边的数据做运算 是这个意思吗?
那么*x++ 和*(x++) 的效果一样吗
c语言运算符结合性
答案:5 悬赏:60 手机版
解决时间 2021-01-26 22:20
- 提问者网友:寂寞撕碎了回忆
- 2021-01-26 17:34
最佳答案
- 五星知识达人网友:荒野風
- 2021-01-26 19:03
后缀 ++ 和 -- 操作符本质上比前缀一目操作的优先级高, 因此 *p++ 和 *(p++) 等价, 它自增 p 并返回 p 自增之前所指向的值。要自增 p 指向的值, 使用 (*p)++, 如果副作用的顺序无关紧要也可以使用 ++*p。
全部回答
- 1楼网友:渊鱼
- 2021-01-26 21:45
c语言中右结合的运算符有:
(1)!逻辑非运算符;~按位取反运算符;++前缀增量运算符;--前缀减量运算符;+正号运算符;-负号运算符;(类型)类型转换运算符;*指针运算符;&地址运算符;sizeof长度运算符
(2)? :条件运算符
(3)=、 +=、 -=、 *=、 /=、 %=、 &=、 ^=、 |=、 <<=、 >>=赋值运算符
- 2楼网友:毛毛
- 2021-01-26 21:34
是啊,就是先和右边的,再和左边的。
你举的那两个例子是这样的:
*X++是将X指针指向的变量加1
*(X++)是将X指针加1(是地址加一个存储单位)然后取指向的空间里的值。
- 3楼网友:过活
- 2021-01-26 20:46
效果是不一样的。要想搞清楚这个问题。就必须先弄懂运算符的优先级问题,然后再清楚++符号在左边在在右边的区别。
在你举的例子中,*的级别低于()的级别,所以计算机在运行结果的时候就先计算括号里面的。然后再考虑你从左到右的计算。
再次就是要弄清楚符号++在左在右的问题。
在左是先加1,在X值上加1再运算该表达式的值,在右是先用该值进行计算表达式,然后再是在X值上加1.
不懂可以多问问,希望能帮助你更多!
- 4楼网友:woshuo
- 2021-01-26 20:02
2L shorker 不确切,所有单目运算符优先级相同,且为右结合性,*x++和*(x++)等价。
可以说,结合性规则在具有多个优先级相同的运算符的表达式中指定了一种新的临时的优先级规则,以便确定运算顺序(所以 LS 引用的资料里面说“后缀 ++ 和 -- 操作符本质上比前缀一目操作的优先级高”——像++x--这样等价于++(x--))。
另外要注意,ISO/IEC C标准没有规定求值顺序。例如(*(++p))-(++(*p))先计算减数还是先被减数,后和……计算这种思路也是不确切的。
通俗地说,无论++是在左边还是在右边。所以说先和……计算。
优先级相同时,结合性规则才有效。由于*和++优先级相同,和实现(编译环境)有关,是不确定的,结合性规则只是确定表达式中相同优先级运算符的一些子表达式中,括号具体加在哪个上面。至于加上括号以后互不嵌套的子表达式具体先计算哪一个,从语言的规则本身是无法确定的1L 脱壳期的蛹 错误,将x指针指向的变量自增的表达式应该是(*x)++
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯