c语言运算符结合性
运算符的结合性是自右向左是什么意思?就是先和运算符右边的数据做运算然后在和左边的数据做运算是这个意思吗?那么*x++和*(x++)的效果一样吗...
运算符的结合性是自右向左 是什么意思?
就是先和运算符右边的数据做运算 然后 在和左边的数据做运算 是这个意思吗?
那么*x++ 和*(x++) 的效果一样吗 展开
就是先和运算符右边的数据做运算 然后 在和左边的数据做运算 是这个意思吗?
那么*x++ 和*(x++) 的效果一样吗 展开
展开全部
1L 脱壳期的蛹 错误,将x指针指向的变量自增的表达式应该是(*x)++。
2L shorker 不确切,所有单目运算符优先级相同,无论++是在左边还是在右边。
优先级相同时,结合性规则才有效。由于*和++优先级相同,且为右结合性,*x++和*(x++)等价。
可以说,结合性规则在具有多个优先级相同的运算符的表达式中指定了一种新的临时的优先级规则,以便确定运算顺序(所以 LS 引用的资料里面说“后缀 ++ 和 -- 操作符本质上比前缀一目操作的优先级高”——像++x--这样等价于++(x--))。
另外要注意,ISO/IEC C标准没有规定求值顺序。例如(*(++p))-(++(*p))先计算减数还是先被减数,是不确定的,和实现(编译环境)有关。所以说先和……计算,后和……计算这种思路也是不确切的。
通俗地说,结合性规则只是确定表达式中相同优先级运算符的一些子表达式中,括号具体加在哪个上面。至于加上括号以后互不嵌套的子表达式具体先计算哪一个,从语言的规则本身是无法确定的。
====
[原创回答团]
2L shorker 不确切,所有单目运算符优先级相同,无论++是在左边还是在右边。
优先级相同时,结合性规则才有效。由于*和++优先级相同,且为右结合性,*x++和*(x++)等价。
可以说,结合性规则在具有多个优先级相同的运算符的表达式中指定了一种新的临时的优先级规则,以便确定运算顺序(所以 LS 引用的资料里面说“后缀 ++ 和 -- 操作符本质上比前缀一目操作的优先级高”——像++x--这样等价于++(x--))。
另外要注意,ISO/IEC C标准没有规定求值顺序。例如(*(++p))-(++(*p))先计算减数还是先被减数,是不确定的,和实现(编译环境)有关。所以说先和……计算,后和……计算这种思路也是不确切的。
通俗地说,结合性规则只是确定表达式中相同优先级运算符的一些子表达式中,括号具体加在哪个上面。至于加上括号以后互不嵌套的子表达式具体先计算哪一个,从语言的规则本身是无法确定的。
====
[原创回答团]
参考资料: 原创
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
是啊,就是先和右边的,再和左边的。
你举的那两个例子是这样的:
*X++是将X指针指向的变量加1
*(X++)是将X指针加1(是地址加一个存储单位)然后取指向的空间里的值。
你举的那两个例子是这样的:
*X++是将X指针指向的变量加1
*(X++)是将X指针加1(是地址加一个存储单位)然后取指向的空间里的值。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
效果一样,自右向左是指从右边向左边运算
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
后缀 ++ 和 -- 操作符本质上比前缀一目操作的优先级高, 因此 *p++ 和 *(p++) 等价, 它自增 p 并返回 p 自增之前所指向的值。要自增 p 指向的值, 使用 (*p)++, 如果副作用的顺序无关紧要也可以使用 ++*p。
参考资料: http://c-faq-chn.sourceforge.net/ccfaq/node51.html
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询