C语言条件表达式(三目运算符)结合性问题

发布时间:2021-09-19 12:59:42

My Blog:http://www.outflush.com/




在C语言标准中规定:条件表达式(三目运算符)的结合性是右结合,即自右向左结合




比如下面这条语句



int i = -2;
int n = ++i == 0 ? 99 : i == -1 ? 11 : 22;



问题是:n的值是多少?




一般理解,根据上面的表达式以及结合性,n的求值语句等价于


int n = ++i == 0 ? 99 : (i == -1 ? 11 : 22);


这时问题就出现了,有些人会对后面括号中的表达式先进行运算,得到结果为22,然后再计算整个表达式,最终得到的结果是 n = 22。




但是运行结果却是 n = 11,这是为什么呢?




究其原因,实际上就是将运算符的结合性与表达式的运算顺序这两个概念弄混了。




就上面这个语句来说,运算符的右结合性只是说明这个表达式等价于


int n = (++i == 0 ? 99 : i == -1) ? 11 : 22;

而不是


int n = (++i == 0 ? 99 : i == -1) ? 11 : 22;



结合性仅仅是定义了多个相同优先级的运算符和与之相关的操作数(操作符)的结合顺序,而并没有规定那个子表达式先运行。




换一种说法,结合性和优先级只是定义表达式的结构,当确定表达式运行时的行为时才需要表达式各部分的运算顺序




C语言对于大多数的运算符没有规定运算顺序,只明确规定了条件表达式(三目运算符)、逻辑与 &&、逻辑或 || 以及逗号运算符的运算顺序(看到逻辑与&& 和 逻辑或 || 运算符是不是想到了什么?对,就是“短路求值”!)。




C语言对于条件表达式(三目运算符)的运算顺序规定为:条件表达式首先对条件部分求值,若条件部分为真,则对问号之后冒号之前的部分求值,并将求得的结果作为整个表达式的结果值,否则对冒号之后的部分求值并作为结果值。




再回到之前的问题看一下,了解了吧~~




总结一下:C语言编译器对于一个表达式进行编译处理时,首先需要确定表达式的结构,这时用到了运算符的优先级和结合性,然后再确定表达式运行时的行为(表达式各部分的运算次序)这里用到了运算符的运算顺序(求值顺序)。


这里需要理解的重点就是优先级、结合性、表达式各部分的运算顺序是不同的概念!




参考文章:【说说C语言运算符的“优先级”与“结合性”】?http://blog.csdn.net/steedhorse/article/details/5903974

相关文档

  • 什么心灵填动词
  • 毛蛤蜊不能和什么一起吃
  • 2020年毕业典礼演讲致辞800字合集
  • 面向对象和面向过程
  • 大彻大悟怎样造句
  • 早上吃海参吃鸡蛋喝牛奶对身体有什么不好的吗
  • 个人简历设计的基本常识
  • 励志演讲致辞合集2020年
  • 朝天子咏喇叭王磐改写
  • 霜重色愈浓作文
  • 我国每14人就有1人患糖尿病如何预防糖尿病
  • 最好的友情是各自忙乱,互相牵挂
  • 一帆风顺的解释和造句
  • Https的数据请求的证书设置
  • Excel里的宏有什么作用
  • chrome浏览器加载图片失败问题
  • 新西兰总理预产期是什么时候Ardern总理休产假代理总理是谁
  • (SfM三维重建一)Colmap使用体验
  • vivoy79内存卡显示不可用
  • 关于检讨书保证书3篇
  • 如何成为一个成功的职业经理人精选多篇
  • Android开发(53) 摄像头自动对焦。在OpenCV图像识别中连续拍照时自动对焦和拍照。...
  • 走进你的世界
  • 朴实一点的能温暖人心的话
  • 临时工劳务合同范本:临时劳务合同简单版
  • 纪念20110325
  • 武陵春读书笔记
  • 随笔600字高中生关于青春懵懂3篇
  • 形容环境安静的句子
  • 下乡支教申请书申请书,下乡,支教
  • 猜你喜欢

  • 2017年6月西南大学继续教育学院9046管理心理学大作业答案
  • 红枣枸杞直接泡开水可以吗需要加糖吗
  • 2019年学年下学期学校卫生工作计划语文
  • 【公文范文】创先争优交流会主持词范文
  • 入党思想汇报:深入学习需多下功夫
  • 儿童诗歌:准备好了吗_诗歌.doc
  • 重载交通对沥青路面结构的影响与分析
  • 失败却不成败的高考励志文章
  • 秘书办公室年终工作小结范文【培训工作总结】
  • 【优质】体育部月工作计划范文word版本 (2页)
  • 陈思诚公开赞女友:佟丽娅的善良俘获了我
  • 外阴大汗腺瘤(专业知识值得参考借鉴)
  • JAVA执行多条cmd命令
  • 快速提高记忆力的方法技巧
  • 【课件】社区卫生护理学 家庭护理PPT
  • 冬季安全常识学生演讲
  • 5.1.3 《吨的认识》教学设计-人教课标版_教案教学设计_1
  • 浙江省东阳中学2019-2020学年高二技术上学期期中试题
  • 社会保障理论和中国社会保障筹资方式之评析
  • 二年级数学上册期末测试A卷冀教版
  • 上海巨视级联式光端机VC系列
  • 潍坊海宏防水材料有限公司(企业信用报告)- 天眼查
  • 【精选】高中化学专题二物质性质的研究课题2乙醇和苯酚的性质第2课时课件苏教版选修6
  • 毕业生大学生活自我总结
  • [精品课件]201x-201x学年高中英语 Unit 11 The Media Lesson 4 What’s in the Papers课件 北师大版必修4
  • 晚上吃什么水果有利于减肥
  • 2014年湖南师范大学小学教育招生简章
  • 【水产养殖个人工作总结】水产养殖工程技术人员职称申报工作总结
  • 【优质】中国国内在线旅游行业市场研究分析报告
  • 宝莫股份:首次公开发行股票投资风险特别公告 2010-08-31
  • 迅雷玩客云等硬件挖矿,是创新还是骗局?
  • 金矿尾矿粉生产蒸压砖的研究
  • 新年祝福语2017老师
  • 2013年高考文科数学上海卷试题与答案word解析版
  • 五年级作文:冬天的早晨_600字
  • 育儿知识-新生儿常见疾病预防
  • 雷电及防雷装置-PPT课件
  • Decomposition of methylamine on Mo(100) surface: A DFT study
  • 生物柴油的研究生产现状与进展
  • 专业英语构词法PPT课件
  • 2012年行政职业能力测验复*-类比推理
  • 人教版小学语文三年级下册第五单元复*课件
  • 电脑版