【随笔】关于c语言中++自增、--自减运算符混合使用问题

C语言基础巩固——运算符优先级与混合表达式相关

## 效果图示:

    关于a++与++a的问题一直是面试以及课堂上老生常谈的问题,但当两者混合并与其他运算符构成新的表达式时,即便是已从业多年的开发人员,突然面对无论是面试题中还是跑路同行留下的“密码”,难免也要挠两下本已稀疏的头。


void main() {
	int a = 10;

	int b = (a++) + (++a) * 3 + (--a) + (a++);
	printf("%d, %d\n", a, b);    // 12, 60

	b = (++a) + (a++) + (--a);
	printf("%d, %d\n", a, b);    // 13, 36

	getchar();
}

## 执行流程:  

    首先明确:自增自减运算符先于普通加减运算执行,自增自减的运算顺序为从右往左,有疑问请自查优先级与运算顺序
    以第一次赋值为例,右端的表达式执行以下操作:
    1:从右向左依次进行--a与++a的运算,内存中a经历 10 --> 9 --> 10 变化
    2:使用临时变量temp存储内存中a的值(10)
    3:从右向左依次执行a++运算,内存中a经历 10 --> 11 --> 12 变化
    4:使用临时变量temp执行后续运算,即 10 + 10 * 3 + 10 + 10 = 60,并最终赋值给b
    :关于第3、4步顺序有待考证,但整个过程应该如上所述

## 一点吐槽:    

    大家都知道无论是a++与++a单独出现时,表示自增,前者表示先运算后自增,后者表示先自增后运算,虽然工作中用到更多的是单独作为循环的一行或一部分出现,但是面试和考试有时远比这要恶心得多,他们爱考,我们也爱踩,而且工作中不泛有许多爱显摆自己的人,偏爱浓缩代码,关键时刻还是要看得懂。

谨以此文提醒来者:我们写的是代码,不是密码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值