一道表达式的经典试题

写出判断ABCD四个表达式的是否正确, 若正确, 写出经过表达式中 a的值(3分)
int a = 4;
(A)a += (a++); (B) a += (++a) ;(C) (a++) += a;(D) (++a) += (a++);
a = ?
答:C 错误,左侧不是一个有效变量,不能赋值,可改为(++a) += a;
改后答案依次为9,10,10,11。

 

 

------------------------------------------------------------------------

自己的实验:

int main()
{
        int a = 4;
        (++a) += (a++);
 
        int b = 4;
        (++b) = (++b) + (b++);
 
        printf("a = %d, b = %d/n", a, b);
 
        return 0;
}

运行结果:

a = 11, b = 13。

 

根据以上结果(个人猜想):

编译器对表达式进行了两遍处理:

  1.第一次:从左到右,进行出现的++运算。

  2.第二次:从右到左,进行表达式的计算。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值