执行流程

分支流程之switch

  语法没什么好说的,如果你不懂我就给你举一个例子,你面前有一排门,每一个门都有一个第一无二的编号,门后面有妹子,现在让你选择

  switch(你选择几号门?){

    case 1号门:{

      ...妹子1

    }break;

     case 2号门:{

      ...妹子 2

    }break;

    default:{  //这里是注释,当你不选时,默认选择这扇门

      ..妹子3

    };

  }

   好了,switch大致意思是这样。下面讨论switch实现原理

  这里是99乘法表的一部分,我分别对他编号,当我说0的时候你应该知道1x1=1的内容。我说2的时候你应该知道1x2=2的内容。这里原理应该比较好理解吧?

现在我同样对case里面的代码也进行了编号,当switch( 这里应该是一个变量 )  变量的值等于1时执行代码块1,变量的值等于2时执行代码块2

你可以这样理解,代码也是在内存中的,当我知道代码块1、2、3的首地址后,使用一个数组保存他们的地址,当访问下标(编号)0时,其实就得到了代码块1的首地址。2同理

下面的分析代码

  情况一:

 switch (n) {
    case 1: {
        puts("代码块1");
    }break;
    case 2: {
        puts("代码块2");
    }break;
    default: {
        puts("代码块3");
    }
    }

 

1. 为 n开辟一块栈空间
2. 判断n-1是否相等,相等条件满足执行跳转
3. 判断n-2是否相等,相等条件满足执行跳转
4. 默认情况

情况二:

    switch (n) {
    case 1: {
        puts("代码块1");
    }break;
    case 2: {
        puts("代码块2");
    }break;
    case 3: {
        puts("代码块3");
    }break;
    case 4: {
        puts("代码块3");
    }break;
    default: {
        puts("代码块x");
    }
    }

  

1. 为switch(x)的x开辟一块栈空间
2. x-CASE中的最小值,得到一个差值,该差值是一个编号
3. 利用第2.步计算的差值和CASE中的最大值-最小值比较,如果大于那么说明不属于编号范围
4. 利用编号查询跳转地址

情况3:

 switch (n) {
    case 57: {
        puts("代码块1");
    }break;
    case 2: {
        puts("代码块2");
    }break;
    case 3: {
        puts("代码块3");
    }break;
    case 4: {
        puts("代码块3");
    }break;
    default: {
        puts("代码块x");
    }
    }

  

1. 和上面情况一样,这里不同的是,设置的二张表,表的关系的一对多

未完,待续。

猜你喜欢

转载自www.cnblogs.com/binaryAnt/p/11100556.html
今日推荐