关于自增、自减运算(vc++6.0)

本文详细解析了自增自减运算在VC环境中的区别及其在函数参数、printf函数中的表现,并通过例子展示了运算顺序和优先级的影响。

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

1. 在不同的运行环境下,自增自减运算是有细微差别的,这里仅说明vc环境中的情况。

2. 一般情况下,自增自减的扫描顺序是从左到右。对于前增减(++i),是以一个运算符为单位进行增减;而后增减(i++)则是以整个表达式为单位最后统一增减。     例1:i=3;b=(++i)+(++i)+(++i);结果b=16。 分析:首先扫描求解前半部分,即(++i)+(++i)的值(先对i进行两次自增运算,i的值变为5,再计算i+i的值为5+5=10),然后再求解后半部分,即10+(++i)的值(先对变量i自增1次,i的值变为6,再计算10+6=16)。     例2:i=1;b=(i++)+(++i)+(++i);结果b=7。 分析:先对第一个加法运算符两端的运算对象处理,先自增一次再求解表达式前两项(2+2=4),然后再对i自增一次再求前一步骤的值(4)与最后一项(++i=3)的和4+3=7。

例3:i=1;a=i++,b=i+1;结果a=1,b=3。

分析:i++是以整个表达式为单位增减的,而不是以语句为单位。逗号表达式前的a=i++已经是一个表达式,所以不会是b=2。

3. 在函数中作为实参时情况又有所不同。其扫描顺序为自右向左。不过运算优先级仍存在。以printf()为例:     例4:x=3;printf("%d,%d",++x,++x);结果5,4。     例5:y=8,x=9;printf("%d,%d\n",(++x,y--),++x);结果8,11。 分析:Printf()中为自右向左算,但括号()的优先级在++、--和,之前。

例6:x=2;printf("%d,%d\n",(x++,x++,x++),x++);结果6,5。

分析:结果很奇怪吧!我第一次碰到时也晕了,在实验后才发现。做实参时在()内如果只有一个表达式,那么其优先级是和没有()时是一样的。此题中的计算顺序为1,2,4,3。即现计算()内的第一个x++,再计算第二个x++,计算完后此时()内只有一个表达式,暂不计算他,而是遵循自右向左的扫描顺序跳转去计算优先级高的第四个x++,最后再去计算第三个x++。

小结:printf()中++x是现加现用,x++是所有的用后再加。printf()之外则是++x从左向右第一个运算符左右两边先都加上再以最大值计算依次向右推进。x++则是所有的x先不加,计算完后再加。

PS:(++x)这种作++x看;(x++)同x++。

转载:http://blog.163.com/wang_351/blog/static/908400472009226155228/

转载于:https://www.cnblogs.com/l289123557/p/3532178.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值