i+++j怎么结合?

langhuazht 2008-11-01 05:09:36


++这个一元运算符的结合律是 从右到左

针对 i+++j 怎么理解? 1、从j开始往左数,形成i+(++j) ;2、从i开始 见到++ 则执行往右的结合 形成(i++)+j 哪个理解正确??还有执行这个运算类的是不是就是从左开始执行,让后见到各种运算符,再进行结合操作? 要是按照这样理解的话,应该是第2个理解对,帮忙确认一下!!
...全文
1437 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
hzc191025 2008-11-01
  • 打赏
  • 举报
回复
按照(i++)+j这种方式组合

注:在TC和VC6.0下都是这样的
jznhljg 2008-11-01
  • 打赏
  • 举报
回复
哦。。针对你这个。当然就是 (i++)+j这种解释方法了。。
还有一个就是i+++++j这个表达式。。。它按照词法"贪心法“来解释。也只能这样解释成 (i++)++ +j
但这样的话 i++它就不是左值了。所以后面的++操作会报错。你可以试试。。。
如果你写成i++ + ++j这样就没问题了。原因上面已经说过了。
ARESK 2008-11-01
  • 打赏
  • 举报
回复
是第一种吧,从右向左结合。对不?
ARESK 2008-11-01
  • 打赏
  • 举报
回复
是第一种吧,从右向左结合。对不?
jznhljg 2008-11-01
  • 打赏
  • 举报
回复
你写的程序是谁在执行。首先是让编译器进行词法分析。扫出来一个个的“符号”token。。然后再执行语法分析。。。
有问题了你就直接去看它是怎么进行的。自然问题就相应而解了。。。
jznhljg 2008-11-01
  • 打赏
  • 举报
回复
词法分析里面有一个所谓的“贪心法”或者说叫“大嘴法”:
每一个符号应该包含尽可能多的字符。 也就是说,编译器将程序分解为符号的办法是
从左到右一个字符一个字符的读入。如果该字符可能组成一个符号,那么再读入下一个
字符。判断已经读入的字符组成的字符串是否可能是一个符号的组成符号。如果可能再
继续读入下一个字符。重复上面的过程。直到读入的字符组成的字符串不再可能组成一个
有意义的符号。

K&R 对这个方法的表述是:
如果(编译器的)输入流截止至某个字符之前都已经被分解为一个个符号,那么下一个
符号将包括从该字符之后可能组成一个符号的最长字符串。

注意:除了字符串和字符常量,符号的中间不能嵌有空白。
如a---b和a-- -b的含义相同。但和a- --b的含义不同。
lrujie 2008-11-01
  • 打赏
  • 举报
回复
2级优先级 右结合 :
 ! 逻辑非运算符 , ~ 按位取反运算符 ,++ 自增运算符 , -- 自减运算符 , - 负号运算符 ,(类型) 类型转换运算符 ,* 指针运算符 ,& 地址与运算符 ,sizeof 长度运算符 .

3级优先级 左结合
  * 乘法运算符 ,/ 除法运算符 ,% 取余运算符 .
4级优先级 左结合
  + 加法运算符 ,- 减法运算符 .
MilanSpiRiT 2008-11-01
  • 打赏
  • 举报
回复
第2种~~~(i++)+j
++的优先级比+高,所以先i++,再+j
wyswyg63 2008-11-01
  • 打赏
  • 举报
回复
(i++)+j 这个

70,020

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧