既然i++运算之后结果暂时不加1为什么default结果+1了
我来解释一下你的代码就清楚了
switch(i++)---这里switch会判断i当前值,即11进行分支判断,判断完成后,i++使i成为12
由于分支判断i为11,所以进入case 11,又一次i++使得i成为13
由于case 11没有break,所以会继续执行下一个case,即case 12
case 12又一次i++,使得i成为14,这时有break,就结束switch分支判断,default是不会执行的
因此最终i的值为14
对于本程序来说,将i++改为++i会受到影响的是switch的判断,++i的话会进入case 12,结果也就不一样了。其余单独的i++和++i效果是一样的
i++和++i是C语言运算符,i++是后缀递增的意思,++i是前缀递增的意思。
1、i++是后缀递增的意思,i++是先进行表达式运算,再进行自增运算。把i++的运算过程拆分开,等效于i=i+1可以看到运算结果是一致的。
x = i ++; //先让x变成i的值1,再让i加1
2、++i是前缀递增的意思,++i是先进行自增或者自减运算,再进行表达式运算。运算结果可以发现,仅从i的值来看,++i和i++最终的i值是一样的,都是i自增加了1。
错题解答:关键没有break,程序不会停止
代码执行流程
switch(i++){}先执行程序出来再加1
i=11,找到对应的case11 i++ 此时1=12 ,重点来了,没有break;不会结束,只能向下继续执行
i=12 满足case12 i++ 此时1=13,有break ,case结束执行,出去switch +1 所以 i最后14
明白了吗?
1.Switch(i++) 相当于做的是 switch(i)
2.若case中 例如case 11中 没有break 则代码会向下执行,从而继续执行case 12,直到遇到break停止
换算到代码中分析
代码体:
#include "stdio.h"
void main()
{
int i = 11;
switch(i++)
{
case 10:
printf("已经进入case 10中\n");
printf("在i++之前,i=%d\n",i);
i++;
printf("在i++之后,i=%d\n",i);
break;
case 11:
printf("已经进入case 11中\n");
printf("在i++之前,i=%d\n",i);
i++;
printf("在i++之后,i=%d\n",i);
case 12:
printf("已经进入case 12中\n");
printf("在i++之前,i=%d\n",i);
i++;
printf("在i++之后,i=%d\n",i);
break;
default:
printf("已经进入default中\n");
printf("在i++之前,i=%d\n",i);
i++;
printf("在i++之后,i=%d\n",i);
}
printf("最后的i的值为:%d\n",i);
}
截图私聊发送
单独的i++和++i没有区别,只有在参与其他运算的时候才有区别。
a=i++
a=++i
这两个是有区别的,2个a的值不一样。。
for(i=0; i<10; i++)
for(i=0; i<10; ++i)
这2个里没有区别,都是自增1
1.i++
和++i
放在表达式里面,前者是原来的i参与运算,后者是自增后的i参与运算
2.看swtich(i++)
,因为此时i=11,所以switch捕获到的值是11,然后i=12
2.5 这道题还涉及了一点:switch-case语句中没有写break的case会继续进入下一个case,直到遇到break语句或者switch-case语句结束
3.进入分支11,i自增变为13,因为没有break语句,继续向下执行,进入分支12。
3.在分支12中i再次自增变为14,遇到break退出switch语句
执行过程如下图所示: