自增操作符(华为面试)

华为c/c++面试题及答案
1.写出判断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

 

 

这个题我在vc 中运行了,结果都正确。

开始真的很不明白是怎么回事,看似简单,在最初学习c的时候就学这个东西,没想到现在做照样还是错。

现在终于弄明白了,分析一下:

如一: a+=(a++)

     

  分析:等号右面先进性计算,由于++ 在a 后面,所以先赋值,a=4,加法赋值后为a=8 然后在自增 a=9;

这个较简单

 

如四: (++a)+=(a++)

 

分析(1) 先计算右边,a=4 赋值。

      (2) 计算左边,此时a自增 a=5.

      (3) 此时a=5,然后计算 加法赋值。由于是两个a相加,a=5,所以相加结果a=10.

      (4) 加法赋值之后,等式右边还有一个自增没计算,计算后为 a=11.完毕。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值