switch语句中case后面的值必须是常量。因为switch语句中,会根据case标签后面的常量值,生成跳转表,只经过少数次数的比较,就可以跳到对应标签下面;如果允许变量,switch对于一个数据也只能从头到尾地进行比较,这就失去了意义。

switch语句中case后面的值必须是常量。

因为C语言中的 switch 不是 if 的替代品。

编译时会对 switch 进行优化,根据 case 标签后面的常量值,生成跳转表,只经过少数次数的比较,就可以跳到对应标签下面。

所以,标签也是不能重复的。如果允许变量,switch 只能退化成跟一连串的 if else, 对于一个数据也只能从头到尾地进行比较,也就失去了 switch 的意义。

跳转表和逐个比较,这两种方式的复杂度差很多。

这也是 python 没有引入和 C 语言里面的 switch case 相对应的控制结构的一个原因。

一般表达式:switch (表达式)

{

case 常量表达式1: 语句1

case 常量表达式2: 语句2

case 常量表达式n: 语句n

default: 语句n+1

}

switch 是“开关”的意思,它也是一种“选择”语句,但它的用法非常简单。switch 是多分支选择语句。说得通俗点,多分支就是多个 if。

从功能上说,switch 语句和 if 语句完全可以相互取代。但从编程的角度,它们又各有各的特点,所以至今为止也不能说谁可以完全取代谁。

当嵌套的 if 比较少时(三个以内),用 if 编写程序会比较简洁。

但是当选择的分支比较多时,嵌套的 if 语句层数就会很多,导致程序冗长,可读性下降。

因此C语言提供 switch 语句来处理多分支选择。所以 if 和 switch 可以说是分工明确的。在很多大型的项目中,多分支选择的情况经常会遇到,所以 switch 语句用得还是比较多的。

推荐教程:《C语言》

在c语言的switch 语句中,的case后面的表达式,switch语句中case后面的值必须是什么?...相关推荐

  1. mfc实现c语言的注释,C语言学习:标识符、关键字、注释、表达式和语句

    正文共:1526 字 2 图.预计阅读时间: 4 分钟. 文章由源世界原创,转载剽窃必究! 标识符 界说变量时,我们使用了诸如 a.abc.mn123 这样的名字,它们都是程序员自己起的,一般能够表达 ...

  2. 实现《C++程序设计语言(特别版)》第6章 表达式和语句 - 桌面计算器 - Linux

    这个实现只是一个思路,需要容错和优化.表达式语法分析如下: *****************  * program:  *     END  *     expr_list END  * expr_ ...

  3. c语言中偶数的平方while,在C语言中可以用以下语句来实现循环:1. 用while语句;2. ...新版1127.ppt...

    在C语言中可以用以下语句来实现循环:1. 用while语句:2. ...新版1127.ppt 循环:就是在给定的条件成立时反复执行某一程序段,被反复执行的程序段称为循环体. 循环语句之 while语句 ...

  4. switch中case后可以是表达式吗_Java中的 quot;如果,那么quot; 怎么表达?

    流程控制语句 在一个程序执行的过程中,各条语句的执行顺序对程序的结果是有直接影响的.也就是说程序的流程对运行结果有直接的影响.所以,我们必须清楚每条语句的执行流程.而且,很多时候我们要通过控制语句的执 ...

  5. c语言switch不允许实型,C语言中switch语句什么意思

    Switch在C语言中是保留字,其作用是进行判断选择.switch(开关语句)常和case break default一起使用. Switch用在编程中,如C语言中它经常跟Case一起使用,是一个判断 ...

  6. c语言switch scanf语句,C语言中scanf函数与switch语句

    ----------------switch---------------- 1)使用格式 switch(表达式){ case 常量表达式1: 语句1; case 常量表达式2: 语句2; ... c ...

  7. 在Java语言的if语句是什么表达式,if语句中的条件表达式中只能使用

    if语句中的条件表达式中只能使用关系或逻辑表达式吗?别的人十句话都不会伤到小编,但你的一句话就可以把小编伤得撕心裂肺. 不是,可以用任意表达式. if语句是指编程语言(包括c语言,C#,,java,V ...

  8. c++语句switch语句_错误:案例标签不在C中的switch语句内

    c++语句switch语句 The error: case label not within a switch statement occurs in C language with switch c ...

  9. c语言if中文字符串比较好,如何在C语言中使用汉字作为if的判断语句?

    题目: 如何在C语言中使用汉字作为if的判断语句? 解答: 直观点可以用strcmp函数,如果想用直接用==或!=来判断,你要先把汉字换成一个unsigned short型,要比较的汉字也放入一个un ...

  10. c语言case用花括号吗,关于C#:在switch-case中使用花括号时的’break’语句

    我在C / Objective-C / C ++中的所有switch case语句中都使用花括号 直到片刻之前,我还没有考虑在括号中包含break;语句是好是坏做法. 我怀疑这无关紧要,但是我认为仍然 ...

最新文章

  1. Linux下创建硬链接,文件访问为空,提示:xxxx: 符号连接的层数过多
  2. SASE — Overview
  3. 清空sqlserver当前日志信息!
  4. Android自定义ViewGroup的OnMeasure和onLayout详解
  5. 全球及中国天然气终端销售市场产量预测及发展策略分析报告2021年版
  6. MIT线性代数:20.克拉默法则,逆矩阵和体积
  7. 牛客 - 双流机场(思维)
  8. centos6编译安装MYSQL8_CentOS 6.4编译安装MySQL8.0
  9. 用友BQ商业智能平台——图表功能
  10. 基于Java学院网页的搜索引擎设计和实现
  11. C#解决Webservice第一次访问特别慢的问题
  12. 西瓜书《机器学习》线性模型 一元线性回归公式推导
  13. LNMP环境搭建笔记
  14. [译]Javascript中的mutators
  15. 【bzoj 2461】[BeiJing2011]符环(高维dp+记忆化搜索)
  16. endnotex7 + word2016 高效管理参考文献
  17. 脉冲耦合神经网络(PCNN)阅读笔记
  18. 偏移量范围计算机组成,计算机组成原理-郑秋梅 - 习题
  19. puppet自动化部署
  20. 利用计算图计算公积金余额

热门文章

  1. Ubuntu Screen recorder tool - Simple Screen Recorder
  2. docker之网络管理
  3. kubectl命令的使用、滚动更新以及回滚操作
  4. UGUI源代码之Image-Sliced模式
  5. Iphone连接Openwrt的IPSEC服务器
  6. Latex + vscode + SumatraPdf配置的一些历程
  7. 64位系统装32位mysql有问题吗_32位系统部署到64位下常见问题及解决
  8. 无线传感器网络作业题
  9. linux 命令:du 详解
  10. Suspense组件