执行流程
Posted binaryant
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了执行流程相关的知识,希望对你有一定的参考价值。
分支流程之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. 和上面情况一样,这里不同的是,设置的二张表,表的关系的一对多
未完,待续。
以上是关于执行流程的主要内容,如果未能解决你的问题,请参考以下文章