一、复杂表达式求值
首先复杂表达式的求值有三个影响的因素
1. 操作符的优先级
2. 操作符的结合性
3. 是否控制求值顺序
那么两个相邻的操作符先执行哪个呢?这就取决于他们的优先级。如果两者的优先级相同,取决于他们的结合性。
二、复杂表达式的例题
例1
int main()
{
int i = 1;
int ret = (++i) + (++i) + (++i);
printf("ret = %d\n", ret);
return 0;
}
首先看这段代码,这里要求的是ret的值。在ret表达式中,++i外面有括号,所以应该先算(++i)的值。当三个++i的值计算完成之后i=4,ret等于三个i相加,故热帖的值为12。
例2
int main()
{
int a, b, c;
a = 5;
c = ++a;
b = ++c, c++, ++a, a++;
b += a++ + c;
printf("a = %d b = %d c = %d\n:", a, b, c);
return 0;
}
首先定义a的值为5,接下来定义c的值为++a,这里根据操作符的优先级我们先算++a,再将a的值赋给c,得到a=6,c=6.
下一行由于' = '优先级大于' , '故这里先算++c,再将++c的值赋给b。运算后b=7,c=7。由于后面是一个逗号表达式,将后面元素计算可得a=8, c=8.
下一行表达式可以写为:b=b+a+c,由于是后置++,故这里参与运算的a的值为8,计算可得b最后的值为23,再算a++得a最终的值为9。
That' it.