转移表的使用
来源:互联网 发布:西安程序员 编辑:程序博客网 时间:2024/05/16 12:16
转换表(jump table)
转移表最好用个例子来解释。下面的代码段取自一个程序,它用于实现一个袖珍式计算器。程序的其他部分已经读入两个数(op1和op2)和一个操作符(oper)。下面的代码对操作符进行测试,最后决定调用哪个函数。
switch(oper)
{
case ADD: result=add(op1,op2);break;
case SUB: result=sub(op1,op2);break;
case MUL: result=mul(op1,op2);break;
case DIV: result=div(op1,op2);break;
......
}
对于一个新奇的具有上百个操作符的计算器,这条switch语句将会非常之长。为什么要调用函数来执行这些操作呢?把具体操作和选择操作的代码分开是一种良好的设计方案。更为复杂的操作将肯定以独立的函数来实现,因为它们的长度可能很长。但即使是简单的操作也可能具有副作用,例如保存一个常量值用于以后的操作。
为了使用switch语句,表示操作符的代码必须是整数。如果它们是从零开始连续的整数,我们可以使用转换表来实现相同的任务。转换表就是一个函数指针数组。
创建一个转换表需要两个步骤。首先,声明并初始化一个函数指针数组。唯一需要留心之处就是确保这些函数的原型出现在这个数组的声明之前。
double add(double,double);
double sub(double,double);
double mul(double,double);
double div(double,double);
double (*oper_func[])(double,double)={add,sub,mul,div,...};
初始化列表中各个函数名的正确顺序取决于程序中用于表示每个操作符的整型代码。这个例子假定ADD是0,SUB是1,MUL是2,接下去以此类推。
第二个步骤是用下面这条语句替换前面整条switch语句!
result=oper_func[oper](op1,op2);
oper从数组中选择正确的函数指针,而函数调用操作符将执行这个函数。
- 转移表的使用
- 指针转移表的使用
- 使用转移表
- 通过转移表练习函数指针的使用
- 转移表到新的表空间
- VirtualBox转移已安装使用的操作系统
- 转移表
- 转移表
- 转移表
- 使用DB2的LOAD FROM CURSOR跨数据库转移数据
- 使用mklink命令转移文件夹清理臃肿的c盘
- 《Android xml文件中转移字符的使用》
- 图像风格转移中神经网络模型的使用
- 初学java--输出helloworld,转移符以及注释的使用
- 收藏夹的转移设置
- 转移以前的日志
- XML 的转移字符
- 常用的转移字符
- Hash 算法及其应用
- Castle ActiveRecord 学习之 .net快速开发 (2)
- 简述Android触摸屏手势识别
- 2010年最强开场白 句句秒杀
- 自己整理的一些有用的文章链接
- 转移表的使用
- JQuery--事件方法2
- 无线鼠标推荐,个人比较喜欢罗技,在我心里就像nokia、IBM
- UNICODE与ANSI的区别
- 书讯:《Spring技术内幕——深入解析Spring架构与设计原理》
- liferay-portlet:login 登陆页面的简化
- Repeater嵌套控件案例
- IIS6与TOMCAT5X整合
- 位运算