【转载】http://hi.baidu.com/dannie007zxl/item/5d0c3185577df719c3162724

有的时候,我们对身旁自认为熟悉的东西,却发现很难去给出准确的回答。

习惯了程序在脑袋中自上向下的执行,默认程序也是如此。

学习switch语句的时候,接受下面这样的程序:

//Code1

switch(a)
{
case :
printf("one");
break; case :
printf("");
break; default:
printf("default");
break;
} /** 输出结果 ****************
a=1 时 输出 one
a=2 时 输出 two
a=3 时 输出 default
****************************/

从学switch起,就被教育 【default 是放在最后的】,从来没去质疑过这种说法。

switch中的default一定要在最后吗?答案是否定的。

那么,下面的执行结果又是什么呢?

//Code2

switch(a)
{
case :
printf("one");
break; default:
printf("default");
break; case :
printf("");
break;
} /** 输出结果 ****************
a=1 时 输出 one
a=2 时 输出 two
a=3 时 输出 default
****************************/

结论是是Code2 与 Code1的结果是相同的,同理即使把default放在第一个位置上,结果也是相同的。

再看一个

//Code3
switch(a)
{
case :
printf("one");
break; default:
printf("default");
// break; case :
printf("");
break;
} /** 输出结果 ****************
a=1 时 输出 one
a=2 时 输出 two
a=3 时 输出 default2 ★多了一个2
****************************/

【结论】

1.default是在case全都不匹配的情况。

2.default放在任意的位置都可以。

3.没有匹配值的时候default就是进入点,进入default以后会和普通进入点一样,如果没有break继续执行下面语句。

Microsoft Visual C++和Borland的编译器都是采用二分查找方法来检测case的各种情况,所以这个switch的case和default执行顺序是与编译器有关的。

switch中的default的位置的更多相关文章

  1. switch语法中break,default作用说明

    转自:http://cjhbest999.iteye.com/blog/1137124 关于java中switch使用的一些说明 switch(表达式) { case 常量表达式1:语句1; .... ...

  2. 关于default的位置问题:default放在前面

    在linux内核的文件系统中,有这样的一段代码: 473 if (this.name[0] == '.') switch (this.len) { 474 default: 475 break; 47 ...

  3. C语言switch中case后跟随break语句

    1.case后面的常量表达式实际上只起语句标号作用,而不起条件判断作用,即“只是开始执行处的入口标号”.因此,一旦与switch后面圆括号中表达式的值匹配,就从此标号处开始执行:而且执行完一个case ...

  4. Switch 中参数的范围探讨

    switch 语句必须遵循下面的规则: switch 语句中的 expression 必须是一个整型或枚举类型,或者是一个 class 类型,其中 class 有一个单一的转换函数将其转换为整型或枚举 ...

  5. C语言strchr()函数:查找某字符在字符串中首次出现的位置

    头文件:#include <string.h> strchr() 用来查找某字符在字符串中首次出现的位置,其原型为:    char * strchr (const char *str, ...

  6. PHP:strpos()-返回字符串在另一个字符串中第一次出现的位置

    strpos()函数返回字符串在另一个字符串中第一次出现的位置.如果没有找到该字符串,则返回false. 语法:strpos(sting, find [, start]) string ,必须,要搜索 ...

  7. C#获取网页中某个元素的位置,并模拟点击

    我们在开发中,往往要得到网页中某个元素的位置,并且点击它.要模拟一次鼠标点击并不难,只要调用一个API就行了,关键就是怎么样得到这个元素的位置,还有判断是否要滚动滚动条,要滚动多少行能让元素显示出来. ...

  8. 倒置字符串s中各字符的位置

    倒置字符串s中各字符的位置 其中reverse函数可以写成更紧凑的形式 void reverse(char s[]){ int c,i,j; ,j=strlen(s)-;i<j;i++,j--) ...

  9. Qt中各个widget前后位置的设定(在Qt中,所有问题都要一分为二,QWidget体系和QGraphicsWidget体系)

    这两天在总结一些以往project中遇到的问题,正好别组有同事问我关于Qt中各个widget窗口的前后位置是如何定义的,这里就总结一下: 在Qt中,所有问题都要一分为二,讨论两种不同的情况:一个是最常 ...

随机推荐

  1. .net中运用solr提升搜索效率(入门)

    概述: 在开发网站的时候经常有要对某些内容查询的需求.此时如果基于数据库查询来做搜索功能,由于要对多个字段做模糊匹配,效率往往非常糟糕.这种情况就可以用Solr来提升搜索的效率.Solr是一个独立的企 ...

  2. 010--VS2013 C++ 平面地图贴图

    先准备好地图的小图片: //全局变量HDC mdc;HBITMAP fullmap;const int rows = 8, cols = 8; //-------------------------- ...

  3. Python实现kMeans(k均值聚类)

    Python实现kMeans(k均值聚类) 运行环境 Pyhton3 numpy(科学计算包) matplotlib(画图所需,不画图可不必) 计算过程 st=>start: 开始 e=> ...

  4. Matlab实现加性高斯白噪声信道(AWGN)下的digital调制格式识别分类

    Matlab实现加性高斯白噪声信道(AWGN)下的digital调制格式识别分类 内容大纲 加性高斯白噪声信道(AWGN)下的digital调制格式识别分类 (1. PSK; 2. QPSK; 3.8 ...

  5. 时间日期设置--ctime头文件

    简述:ctime头文件中的4中与时间相关的数据类型 <ctime>头文件中定义了4种与时间有关的数据类型,如下:clock_tsize_ttime_tstruct tm clock_tCl ...

  6. 容器适配器之stack

    参见http://www.cplusplus.com/reference/stack/stack/ template<class T, class Container = deque<T& ...

  7. Teamwork-Week3 职责划分及团队分数分配原则

    本组人数:5. 一.人员职责划分 PM:1            柴泽华 PM的职责: 1)根据项目范围.质量.时间与成本的综合因素的考虑,进行项目的总体规划与阶段计划. 2)设置项目组中的各种角色, ...

  8. 使用JavaScript+Html创建win8应用(二)

    向我们的应用中添加JavaScript 的 Windows 库控件,首先我们接着上一个demo把一个评分控件添加进来 与 HTML 控件不同的是,适用于 JavaScript 的 Windows 库控 ...

  9. 【Symmetric Tree】cpp

    题目: Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center). F ...

  10. 本地wordpress博客系统安装搭建实践

    我们按步骤来, (1)安装XAMPP集成软件包 wordpress 的运行要求是在 php + MySQL + Apache的服务器环境,所以要先搭建该环境,我用的是XAMPP软件包,安装很方便. 下 ...