标签:理解 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