由于计算路径不唯一所致的问题表达式

表达式1
a*b+c*d+e*f;

注释:表达式1在计算的时候,由于“++”比“+”的优先级高,只能保证“++”的计算是比“+”早,但是优先级并不能决定第三个“*”比第一个“+”早执行。

所以表达式的计算机顺序可能是:

a*b
c*d
e*f
a*b+c*d+e*f

或者:
a*b
c*d
a*b+c*d
e*f
a*b+c*d+e*f
表达式2
c + --c;

注释:同上,操作符的优先级只能决定"–“的运算在“+”的运算前面,但是我们并没有办法得知”+"操作符的左操作数的获取在右操作数之前还是之后,所以结果是不可预测的,是有歧义的。

表达式3
int fun()
{
     static int count = 1;
     return ++count; }
int main()
{
     int answer;
     answer = fun() - fun() * fun();
     printf( "%d\n", answer);//输出多少?
     return 0;
 }

注释:虽然在大多数的编译器上求得结果都是相同的。但是上述代码 answer = fun() - fun() * fun()中我们只能通过操作符的优先级得知:先算乘法,再算减法。函数的调用先后顺序无法通过操作符的优先级确定。

表达式4
#include <stdio.h>
int main()
{
 int i = 1;
 int ret = (++i) + (++i) + (++i);
 printf("%d\n", ret);
 printf("%d\n",i);
 return 0;
 }

注释:这段代码中的第一个“+” 在执行的时候,第三个“++”是否执行,这个是不确定的,因为依靠操作符的优先级和结合性是无法决定第一个“+”和第三个“++”执行的先后顺序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值