• switch中的default的位置


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

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

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

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

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

     

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

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

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

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

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

    再看一个

    //Code3
    switch(a)
    {
     case 1:
         printf("one");
         break;
    
     default: 
         printf("default");
    //   break; 
    
     case 2: 
         printf("2");
         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执行顺序是与编译器有关的。

  • 相关阅读:
    通过命令行指定 Java 程序运行时使用的字符集
    Ubuntu Linux 开启 root 用户及其它登录问题的解决
    SLF4J 的几种实际应用模式 SLF4J+Log4J 与 SLF4J+LogBack
    Java 获取当前时间的年月日方法
    Eclipse 全屏插件
    Linux 下的纯 C 日志函数库: zlog
    如何使用 Log4j
    DAO 设计模式
    为什么要用 /dev/null 2>&1 这样的写法
    NSDate和NSString之间的转换
  • 原文地址:https://www.cnblogs.com/LubinLew/p/default_in_switch.html
Copyright © 2020-2023  润新知