c语言表达式有时候从左向右,有没有童鞋遇到过同样的问题:C语言的条件表达式从右向左结合怎么理解谢谢哈~...

cc097b4dfc18301074081b6b877ce574.png

qq_笑_17

先说结合性严格地讲C语言本身没有结合性(与优先级)的概念。它的语法是用BNF(wiki)表示的。为了便于学习者理解,会提到左结合、右结合,但是它描述有些复杂的运算符的时候有些困难,比如?:。z=(a==b?a:b?c:d);C语言关于?:的语法是这样定义的:conditional-expression:logical-OR-expression?expression:conditional-expression?前面是一个"logical-OR-epxression",而a==b?a:b不能解释为"logical-OR-expression"。所以,没有()的情况下,不会将a==b?a:b结合在一起。a=b=c关于"assignmentexpression",有如下规则:assignment-expression:unary-expressionassignment-operatorassignment-expression"assignment-operator"左侧必须是一个"unary-epxression"。a是unary-expression,但是a=b不是。所以必然后右侧的b=c结合为一个"assignment-epxression"。所有的规则可以参考C11标准草案附录A。再说执行顺序C语言并不是先结合在一起的就会先执行的。在同一个表达式内,除非有特殊规定,或者有依赖,否则求值顺序是不一定的。对于conditional-expression:logical-OR-expression`?`expression`:`conditional-expression其中的logical-OR-expression一定是最先执行的。然后,根据其结果,选择expression与conditional-epxression之一执行。在这里,c==0?printf("1\n"):(c=2)?(c=3):printf("4\n")c==0先执行,然后(由于其结果是true)执行printf("1\n")。(c=2)?(c=3):printf("4\n")虽然被结合在了一起,但是作为外层?:的一部分,根本没有执行。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值