函数指针最常见的用途之一是转换表(jump table)。转换表最好用个例子来解释,以下代码取自一个袖珍式计算器。程序已经从键盘上读入了两个数(op1和op2)和一个操作符oper。下面的代码对操作符进行测试,然后决定调用哪个函数:
switch (oper){ // 枚举变量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语句将会非常之长。
下面用转移表来化简这类应用。 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,...};
应用:用下面这条语句替换前面整条switch语句: result = oper_func[ oper ]( op1,op2 );
(上例中switch( oper )中的oper是一个枚举变量。) |