switch (integer expresssion)
{
case constant1:
statements;
case constant2:
statements;
default:
statements
}
(1)(integer expresssion)表达式只能是整型(包含char类型,enum类型)。case 标签必须是整型常量或者整型常量表达式,不能使用变量。
(2)default 可以放在 switch中任意位置,当没有匹配的case时候,执行default语句;
(3)当case中没有break时候,会继续执行下面的case,包括defalut语句;
eg1:
int n= 0;
int e= 0;
switch (e)
{
case 2:
n = 2;
case 3:
n = 3;
default:
n = 4;
}
输出 n=4 ,没有匹配到case执行 default
eg2:
int n= 0;
int e= 0;
switch (e)
{
default:
n = 4;
case 2:
n = 2;
case 3:
n = 3;
}
输出 n=3 ,没有匹配到case执行 default,但是没有break,继续执行下面的case
eg3:
int n= 0;
int e= 3;
switch (e)
{
case 2:
n = 2;
case 3:
n = 3;
default:
n = 4;
}
输出 n=4 ,匹配到case 3执行语句,但是没有break,继续执行下面的default 。
(4)switch内部 变量声明、定义 :不允许在switch{}同样作用域内定义变量,但是可以声明变量
int e= 3;
switch (e)
{
int n= 0; //(a)编译错误
case 2:
n = 2;
case 3:
int h= 0; //(b)编译错误
n = 3;
default:
n = 4;
}
1)这两个变量定义均无法编译,因为switch的{}内内容是属于同一个代码块,所以我们在(ab)等位置定义的变量在整个switch内都是可见的。但是如果case 2的时候
导致 n存在没有定义的情况,因为存在这类的隐患,编译器避免了这种使用方式。
int e= 3;
switch (e)
{
int n; //(a)合法
case 2:
n = 2;
case 3:
{
int h= 0; //(b)合法,改变了变量的作用域,限定在此{}代码块内。
}
default:
n = 4;
}
(a)可以声明变量,这时合法的,但是要避免这种使用。
(b)合法,改变了变量的作用域,限定在此{}代码块内。