码迷,mamicode.com
首页 > 其他好文 > 详细

执行流程

时间:2019-06-28 09:17:31      阅读:113      评论:0      收藏:0      [点我收藏+]

标签:理解   mic   执行流程   不同的   流程   设置   乘法表   现在   分析   

分支流程之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. 和上面情况一样,这里不同的是,设置的二张表,表的关系的一对多

 

未完,待续。

执行流程

标签:理解   mic   执行流程   不同的   流程   设置   乘法表   现在   分析   

原文地址:https://www.cnblogs.com/binaryAnt/p/11100556.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!