switch中的i++与++i

for(语句1;语句2;语句3)

在上式for循环的语句3中,i++与++i都是在完成一次循环后执行,无论使用哪一种,输出结果都是一样的。因为i++是在使用当前值之后再+1,所以会需要一个临时变量来转储,而i++则直接+1,不存在这样的问题。所以在不使用release优化而使用debug版本的时候我们可以使用i++以提高性能。而在编译器优化后两者都一样。

而在switch中,i++与++i是否也是一样的呢?

为了展示验证程序运行中经过了哪些语句,我们在每一个case分支的输出语句中指出了程序经过的分支。

#include<stdio.h>
int main()
{    
int s=6;
switch(s++)
{ case 6:printf("\n%d by case6",s);
  case 7:s+=2;printf("\n%d by case7",s);
  case 8:printf("\n%d by case8",s);
  case 9:s+=2;printf("\n%d by case9",s);
}
printf("\nresult = %d",s);
     return 0;
}

这里的是第一个程序的输出结果
由程序运行结果可以推测得知:
程序先进入到case 6,然后s自增1得到7,之后输出为7;
这之后没有break语句,各个case语句被依次执行,最终得到s=11。

#include<stdio.h>
int main()
{    
int s=6;
switch(++s)
{ case 6:printf("\n%d by case6",s);
  case 7:s+=2;printf("\n%d by case7",s);
  case 8:printf("\n%d by case8",s);
  case 9:s+=2;printf("\n%d by case9",s);
}
printf("\nresult = %d",s);
     return 0;
}

此处为第二个程序的输出结果
由程序运行结果可以推测得知:
首先s自增1得到7,程序进入到case 7,之后输出为7;
这之后没有break语句,各个case语句被依次执行,最终得到s=11。

由实验结果,我们可以得知:switch (i++) 会先执行分支判断再自增;switch(++i) 会先自增再执行判断。

  • 12
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值