几个复杂表达式的例题

一、复杂表达式求值

首先复杂表达式的求值有三个影响的因素

 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.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

coderMiLong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值