不要把case当成if。
如果它具有if功能,显然就不会出现选择了case 0还会进入case 1的情况,也就没有必要使用break语句。
case可理解为一个纯粹的入口,没有任何判断功能,所以在进入一个入口后,还可以依次进入下一个入口,除非使用break语句跳转至结束(break相当于一个goto语句)。
在编译阶段,编译器会正确计算每一个case入口与switch语句之间的距离,生成一个跳转表(也可能是一个计算距离的公式,总之就是等价的东西),当知道a的值后,直接用跳转表中相应项跳转到正确的入口,避免了if判断,因此速度很快
case 0:switch(b==2)
{case 1:printf("*");break;
case 2:printf("%");break;
case 3:printf("#");
}
case 0 后面没有break,所以继续往下执行