C语言单目运算符“++”、“--”的结合性问题。

比如:
#include <stdio.h>

void main()
{
int a,b,c;

a=1;
b=2;
c=a+++b;
printf("a=%d,b=%d,c=%d\n",a,b,c);
}
输出结果为:a=2,b=2,c=3

显然是a做了自增的运算,即:c=(a++)+b;

我的疑惑是:

++是右结合性,为什么不是++b,而是a++

求解答

或者可以写个典型的简单例子,可以解决我的疑惑。

c = a+++b; 等价于 (a++)+b
你说的 a+++b 为什么不是 a + (++b) ,是因为编译器解释一行代码的先后顺序,编译器在解析代码时是按从左到右的顺序来的。
在碰到 字母 a 后,向右解析, 发现了 a+ 这两个字母,a+中的 + 可以是 + 号运算符, 也可以是 自增运算符,编译器不能确定,只能再向右解析,又碰到一个+,就变成了 a++了,这时是一个自增运算表达式,但编译器仍向右解析,又碰到了一个+,变成了 a+++,但是 C++语言中这种表达式是非法的,所以将碰到的这个 + 变成 "+" 运算符,最后向右解析到 得到 b ,将表达式转换成 (a++)+b, 同样的道理,可以推导出
a+++++b; 不会解释成 (a++) + (++b),
因为编译器解释代码时从左到右的顺序。 初学者对于这个问题不必过于深究。
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2016-04-02
a+++b的意思是在执行完这句话之后,a会再自增一次。
也就是先执行a+b,然后a再自增一。
编译器的在编译时是从左到右匹配运算符的,所以这个是编译器规定的。本回答被网友采纳
第2个回答  2011-04-06
故意整编绎器的是吧。同等的由左算起,+++编辑器会分成++,+这样用运算符,效率很低,建议别试这些没用的
第3个回答  2011-04-03
++a比a++的优先级高,记住就好了
第4个回答  2011-04-06
忘了。。。看了前面几位的答案我还没想起来。。。
不过关于编译器的问题,我觉得现在可以没必要理解太深入,会学的。。。

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网