C语言单目运算符“++”、“--”的结合性问题。
发布网友
发布时间:2022-04-30 08:35
我来回答
共5个回答
热心网友
时间:2022-06-19 21:36
c = a+++b; 等价于 (a++)+b
你说的 a+++b 为什么不是 a + (++b) ,是因为编译器解释一行代码的先后顺序,编译器在解析代码时是按从左到右的顺序来的。
在碰到 字母 a 后,向右解析, 发现了 a+ 这两个字母,a+中的 + 可以是 + 号运算符, 也可以是 自增运算符,编译器不能确定,只能再向右解析,又碰到一个+,就变成了 a++了,这时是一个自增运算表达式,但编译器仍向右解析,又碰到了一个+,变成了 a+++,但是 C++语言中这种表达式是非法的,所以将碰到的这个 + 变成 "+" 运算符,最后向右解析到 得到 b ,将表达式转换成 (a++)+b, 同样的道理,可以推导出
a+++++b; 不会解释成 (a++) + (++b),
因为编译器解释代码时从左到右的顺序。 初学者对于这个问题不必过于深究。
热心网友
时间:2022-06-19 21:37
a+++b的意思是在执行完这句话之后,a会再自增一次。
也就是先执行a+b,然后a再自增一。
编译器的在编译时是从左到右匹配运算符的,所以这个是编译器规定的。
热心网友
时间:2022-06-19 21:37
故意整编绎器的是吧。同等的由左算起,+++编辑器会分成++,+这样用运算符,效率很低,建议别试这些没用的
热心网友
时间:2022-06-19 21:38
++a比a++的优先级高,记住就好了
热心网友
时间:2022-06-19 21:38
忘了。。。看了前面几位的答案我还没想起来。。。
不过关于编译器的问题,我觉得现在可以没必要理解太深入,会学的。。。