java,C语言:三目运算符和++--运算符的右结合性怎么理解

可以这么理解: ++  和  ?:

首先对于i++的实现是:  
                                             int   temp;  
                                             temp   =   i;  
                                             i   =   i+1;  
                                           
  return   temp;  
++i的实现是:  
                                              i   =   i+1;  
                                           
   return   i;        

该部分思路来自于(C语言 a++为什么不能作为左值?_JCRunner的博客-CSDN博客

a++的运算结果并不是a这个变量的引用,而是一个临时变量,其值为i的值,所以你无法进行以下运算:   
  a++=5;   甚至编译器不允许你对一个临时变量重新赋值,上面的表达式会引起编译错误 

左值就是可以在"="左边,能被赋予值的东西;右值则是在"="右边,可以赋值给别人的东西。所以左值必须是有内存空间的东西;而右值则既可以是变量,也可是常量和某种表达式,只要能提供一个值即可。

结合律只用于表达式中同一个对象左右出现两个相同优先级的操作符的情况,用于消除歧义。相当于添加()来调节优先级,优先级不同时按优先级运行,结合律可以忽略

思路来自:(a+++++b表示什么含义 - arrow' - 博客园

综上所述,为什么a+++++b会编译错误呢?

1.c = a+++++b;//这样写会编译错误,首先,+++更被优先识别,

所以相当于a++ ++ +b,((a++)++)+b,a++不能作为左值(左值才可以)

2.再举一个例子:c = a++++b;//这样就会编译错误,因为这相当于((a++)++)b,这没有意义

3.再举一个例子:c = ++a++因为++运算符是右结合性的,所以相当于++a++),a++不是一个左值,无法被修改,因此会编译错误

这篇文章帮助理解三目运算符:相当详细!

关于C++条件运算符(三目运算符)右结合的说明_weixin_30555753的博客-CSDN博客

这是一个具有参考意义的一篇文章,虽然是讲c++,但是个人认为可以帮助理解

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值