比如:
#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),
因为编译器解释代码时从左到右的顺序。 初学者对于这个问题不必过于深究。
你说的 a+++b 为什么不是 a + (++b) ,是因为编译器解释一行代码的先后顺序,编译器在解析代码时是按从左到右的顺序来的。
在碰到 字母 a 后,向右解析, 发现了 a+ 这两个字母,a+中的 + 可以是 + 号运算符, 也可以是 自增运算符,编译器不能确定,只能再向右解析,又碰到一个+,就变成了 a++了,这时是一个自增运算表达式,但编译器仍向右解析,又碰到了一个+,变成了 a+++,但是 C++语言中这种表达式是非法的,所以将碰到的这个 + 变成 "+" 运算符,最后向右解析到 得到 b ,将表达式转换成 (a++)+b, 同样的道理,可以推导出
a+++++b; 不会解释成 (a++) + (++b),
因为编译器解释代码时从左到右的顺序。 初学者对于这个问题不必过于深究。
温馨提示:答案为网友推荐,仅供参考