什么是switch语句?
在C语言中,switch语句是一种流程控制语句,用于在一系列不同的值中选择需要执行的操作语句。它是一种多分支语句,可以将多个if-else语句合并,使代码更加简洁清晰。
switch(expression){
case constant1:
statement1;
break;
case constant2:
statement2;
break;
case constant3:
statement3;
break;
default:
defaultStatement;
}
其中,expression是要计算的表达式,常量constant1、constant2、constant3代表不同的值,statement1、statement2、statement3是在对应值成立时要执行的语句,defaultStatement是默认情况下执行的语句。
case后能否是一个关系表达式?
在C语言中,case后只能跟随着一个常量表达式,不能是变量或其他表达式,例如:
int x = 1;
switch(x){
case 1:
printf("x=1\n");
break;
case 2+2: // 错误示例
printf("x=4\n");
break;
default:
printf("others\n");
}
上述代码中,case后的2+2是一个表达式,不是常量表达式,所以会出现编译错误。
常量表达式与关系表达式的区别
为了更好地理解为什么case后不能是关系表达式,我们首先来看一下常量表达式和关系表达式的区别。
常量表达式是在编译时就可以计算出来的表达式,例如:1+2、3*4、sizeof(int)等。
#define PI 3.1415926
int r = 2;
double s = PI*r*r; // 这里的PI*r*r是一个常量表达式
关系表达式是一种在运行时需要计算的表达式,例如:a>b、sum>0等。
int a = 1, b = 2;
if(a > b){ // 这里的a > b是关系表达式
printf("a > b\n");
}
由于case后只能是常量表达式,而不能是关系表达式,因此,case后不能用“>”、“<”等操作符,也不能用变量或函数调用等表达式。
需要注意的是,虽然常量表达式和关系表达式的区别很明显,但在实际编程中很容易出现混淆的情况,因此在使用switch语句时要格外小心。