### C语言关键字浅析系列 ###

### ISO/ANSI C 关键字 ###

switch在英文中是“开关”的意思,比如switch on和switch off可以表示电灯的开关

在C语言中,switch常被用在switch选择语句处,这种语句当然也常被称之为开关语句

switch的作用是:

多重选择、switch语句的标志。

1、switch的基本格式

和if-else结构中if的格式类似,switch后也有一个小括号带着一个表达式,不过这个表达式的结果是有限制的

switch后的表达式和语句内的所有标签只能是整型(char)常量或整型常量表达式的:

/* 常见的用switch去匹配int类型 */
switch (c)   /* 格式是:switch关键字后写小括号,括号内写整数常量或整型表达式 */
{case 1: c++; break;   /* case关键字后空格写标签值,也只能是整数常量或整型表达式 */case 2: c--; break;default: c = 1;       /* default关键字指的是所有标签不匹配的情况下所执行的语句 */
}/* char类型去比对 */
switch (ch)
{case 'a': c = 'z'; break;case 'z': c = 'a'; break;default: c = 'a';
}

2、switch是怎么运作的

switch之所以称之为开关语句,其实也是源于它的工作原理:

将switch后的表达式值与所有case标签后的表达式从头依次比较,如果匹配(相等),则程序从此标签后开始执行,如果没有匹配项,看default关键字,如果有default,从default处开始执行,否则跳出语句继续往后执行。

看下面这个例子:

switch (c)
{case 1:       /* 如果匹配到1,程序从此处开始执行,1后没有语句,但这里也算是开始的起点 */case 2:       /* 如果匹配到2,程序从此处开始执行,当然匹配到1时,程序也能执行到这里,从break处跳出switch语句 */c++;break;case 3:       /* 匹配到3,从此处开始执行c=c+2,注意此处程序有bug */c += 2;case 4:       /* 匹配到4,开始执行c--,上一条语句之所以有bug,就是因为程序从标签3后开始执行, */c--;      /* 会一直往后执行直到遇到break,所以得到的值可能是不正确的 */break;default:      /* 没有匹配情况,从default处开始执行 */c = 0;
}

所以一般我们在一个标签匹配的情况处理完毕后,会加上break语句跳出switch结构,通常default放在最后,且不必写break

那如果default不放在末尾呢?详情请阅读本文末的相关文章-default

3、switch的用法

首先,与if-else不同,switch结构没有嵌套的说法,因为其本身就是一种多重选择结构,不过形式有点不同

比如在一个需要不区分字母大小写输入的系统程序中,switch结构可能会更直观简练:

char c;
int flag;
input(&c);    /* 输入一个字母 *//* if-else结构实现 */
if(c == 'A' || c == 'a')flag = 0x100;
else if(c == 'B' || c == 'b')flag = 0x101;
else if(c == 'C' || c == 'c')flag = 0x102;
……
elseflag = 0x001;   /* 报错 *//* switch结构实现 */
switch (c)
{case 'A':case 'a':flag = 0x100;break;case 'B':case 'b':flag = 0x101;break;case 'C':case 'c':flag = 0x102;break;……default:flag = 0x001;   /* 报错 */
}

switch和if-else的选择是平分秋色的,二者都是很好的选择结构,switch相对于if-else的劣势在于,其判断的表达式必须是整型的,

而且switch与for循环很不好配合使用,导致了一些大量数据遍历判断和非整型表达式判断选择的情况不能用switch

但能用switch的时候可以选择使用,一方面是switch的速度比if-else会稍微快一些,另一方面可能带来可读性方面的优化效果

——参考《C Primer Plus第五版》

相关文章:

C语言关键字浅析-case

C语言关键字浅析-default

C语言关键字浅析-if

C语言关键字浅析-switch相关推荐

  1. C语言关键字浅析-enum

    ### C语言关键字浅析系列 ### ### ISO/ANSI C 关键字 ### enum关键字的原型是enumerated type,意思是枚举类型 这是ISO/ANSI C90标准新增的关键字之 ...

  2. C语言关键字浅析-return

    ### C语言关键字浅析系列 ### ### ISO/ANSI C 关键字 ### return关键字是C程序中最常见的关键字之一 对于一个最简单的demo程序,或者说你最早接触的HELLO WORL ...

  3. C语言关键字浅析-double

    ### C语言关键字浅析系列 ### ### ISO/ANSI C 关键字 ### double关键字声明一种称之为"双精度"的浮点数据类型 其"双"之处在于与 ...

  4. C语言关键字浅析-float

    ### C语言关键字浅析系列 ### ### ISO/ANSI C 关键字 ### float从单词的字面上看是"浮动"的意思 在C语言中,float表示一种基本数据类型,浮点型, ...

  5. C语言关键字浅析-do

    ### C语言关键字浅析系列 ### ### ISO/ANSI C 关键字 ### do关键字在C语言中不能单独使用 它需要和while关键字配套使用表示一种退出条件循环结构 其区分于while循环和 ...

  6. C语言关键字浅析-while

    ### C语言关键字浅析系列 ### ### ISO/ANSI C 关键字 ### while在英文中常被翻译为"在--的时候,当--时",私以为在C语言的while里,应当为&q ...

  7. C语言关键字浅析-_Imaginary

    ### C语言关键字浅析系列 ### ### ISO/ANSI C 关键字 ### _Imaginary是C99新增的关键字,表示一种基本数据类型--虚数 与_Complex一样,该类型的出现主要是为 ...

  8. C语言关键字浅析-short

    ### C语言关键字浅析系列 ### ### ISO/ANSI C 关键字 ### short,本意是"短,矮"的意思,在C语言中声明一种短整数类型,与long相对应 short与 ...

  9. C语言关键字浅析-const

    ### C语言关键字浅析系列 ### ### ISO/ANSI C 关键字 ### const关键字是ISO/ANSI C90标准新添加的关键字之一 同期的"新生"还有enum.s ...

最新文章

  1. 【GitLab】gitlab上配置webhook后,点击测试报错:Requests to the local network are not allowed...
  2. python对XML的解析
  3. java bmp_JAVA实现对BMP图片的读取
  4. QTP的那些事--调用外部的文件的方法
  5. mysql alter怎么用,mysql alter话语用法
  6. android double转string_Java数组转List的三种方式及对比
  7. 计算机管理 如何将c盘,教程:新买的电脑如何把C盘分区成多个盘?
  8. HDU-2602-Bone Collector(dp)
  9. AttributeError: 'dict' object has no attribute 'has_key'
  10. 博客美化---(1)
  11. android studio gjson,Android Studio插件GsonFormat
  12. requests+正则表达式爬取豆瓣读书top250
  13. C# ASP.NET WebApi入门
  14. mysql 获取两个月前的日期
  15. 软文营销如何自我激励创造巨大价值
  16. CSDN20181219博客黑板报
  17. 画一个椭圆c语言程序,画椭圆 - c代码库 - 云代码
  18. 自动化运维工具Ansible(2)ad-hoc
  19. mac键盘符号的使用_在Mac上使用表情符号的终极指南
  20. 百度2016年软件测试开发工程师面经

热门文章

  1. 函数栈帧的创建与销毁
  2. idea 注册码 20190326
  3. walden中的词频计算
  4. DH-90L型零序(剩余)电流互感器
  5. 一步一步实现windows多台电脑文件共享(局域网)
  6. 美国宾州计算机学校,美国宾州顶尖走读学校推荐!
  7. C++语言值map用法
  8. 《乌克兰拖拉机简史》读后感
  9. android 设置4个棱角的颜色,整个布局圆角效果,类似图片圆角
  10. selenium窗口切换和关闭指定窗口