++与--(程序中不经意间出的错误记录)

本文探讨了在C语言中自增运算符前置与后置的不同处理方式导致的bug案例。作者通过一个具体的代码示例解释了为什么后置自增运算符会导致变量始终为0,并给出了修正方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天在码代码的时候,写了个:
var tIndex = 0;
…….
case 38://up
tIndex = (tIndex+1)%crtTMax;
一个按键触发

但是一不小心写成了
tIndex = (tIndex++)%crtTMax;
之后便发现无论怎么按键触发tIndex的值都是0
后来仔细想了下:
主要是编译器对于这种多种赋值处理问题:
后置++是先引用再赋值,前置++是先赋值再引用
所以
(tIndex++)= 0
0%crtTMax
然后根据“=”处理规则,从右向左赋值
先是
tIndex = tIndex+1;
tIndex = 0%crtTMax;
所以tIndex一直为0
若改为
tIndex = (++tIndex)%crtTMax;
便没了问题。

下面引用一个例题来详细说明下自增与自减运算符:
表达式(i++)+(++i)+(–i)+(i++)的结果是:8
i值是4

分析如下(Tc环境):
1、++和–是C中的自增自减运算符,使变量值加1或减1。

2、++和–放在变量前后的位置不同,运算的机制也不同。如果放在前面,可以理解为“先增(减)值,后引用”;如果放在后面,可以理解为“先引用,后增(减)值”。“引用”的含义是指将变量的当前值,放在表达式中进行计算。“增(减)值”的含义是指变量自身值的变化。

3、最关键的一点就是:当程序扫描由多个++和–构成复杂的表达式时,会首先检查所有的前置运算++或–(先增减值,后引用),通过计算得到一个值,然后将这个值重复加N次即可,N是自增自减运算的个数。

4、以(i++) + (++i) + (–i) + (i++)为例,首先检查有2个前置运算,一个是++,一个是–,i的值为2,有4个自增减运算,所以2*4=8。再复杂的表达式也是如此。 i本身的值就很好理解,不必多说。

5、这种表达式书写复杂,理解困难,建议不要这样使用为好。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值