| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 984 人关注过本帖, 1 人收藏
标题:刚学C语言,弱弱的问个问题
只看楼主 加入收藏
谢依凉
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2020-12-9
收藏(1)
 问题点数:0 回复次数:2 
刚学C语言,弱弱的问个问题
a=5,b=6 ,++a==b--,
为什么成立,不是++和--的优先级比==高吗?
搜索更多相关主题的帖子: 优先级 C语言 
2020-12-09 19:51
apull
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:三体星系
等 级:版主
威 望:216
帖 子:1509
专家分:9241
注 册:2010-3-16
收藏
得分:0 
==是从左到右结合的,

++a和a++也不相同

a=0时
b=++a //++在前,先加后赋值,结果b=1
b=a++ //结果b=0

所以++a==b--的顺序是
是a=a+1,a==b,b=b-1
2020-12-09 21:49
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9031
专家分:54061
注 册:2011-1-18
收藏
得分:0 
估计你是谭浩强的受害者,“优先级”“评估顺序”是两个完全无关的概念,虽然这两个概念常常需要联合运用。
同时,“表达式评估值”与“副作用”也是两个不相干的概念,谭浩强把它们混在一起。

先说“优先级”,你的 ++a==b-- 根据优先级应当看成是 (++a) == (b--),而非 ++((a==b)--)、((++a)==b)-- 等等,这就是“优先级”的作用,优先级确保表达式无二义;
除了“优先级”,其实还有一个“结合性”是联合在一起使用的。比如 ++a++, 两个++的优先级一样,是看成 (++a)++ 还是 ++(a++)? 这时就由“结合性”说了算。

先评估“++a”,还是“b--”?在这里C规定它们之间无评估先后顺序;而 a=5,b=6,++a==b-- 则有规定先评估“a=5”再评估“b=6”

对于“表达式评估值”与“副作用”,比如 ++a, 谭浩强说先++等的,则完全错误了,“a自增1 这个副作用”完全可以发生在“++a 这个表达式评估”之后。
还是以你的“a=5,b=6 ,++a==b--”为例,当评估“++a”时,获得了“++a”这个表达式的值6,但a仍然可能还是5;当评估“b--”时,获得了“b--”这个表达式的值6,但b可能早先就变成了5。

估计你听得有点儿绕了,简单的说,++a == b-- 中是 "++a" 与 "b--" 这两个表达式进行比较,而非 a 与 b 进行比较。
++a 的评估值是等同于 原先a+1 的值,副作用是 a自增了1,但副作用只需要在下一个序列点前完成就行
b-- 的评估值是等同于 原先b 的值,副作用是 b自减了1,但副作用只需要在下一个序列点前完成就行
收到的鲜花
  • lin51616782020-12-10 09:41 送鲜花  10朵  
2020-12-10 09:07
快速回复:刚学C语言,弱弱的问个问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026778 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved