设为首页 加入收藏

TOP

转换表
2014-11-23 21:58:15 来源: 作者: 【 】 浏览:6
Tags:转换


如果把想做的事可以缩小在某一范围内,可以利用转换表。通常是常用的数字范围,也可以不是,下面的例子用的就不是数字范围

可以将待调用的函数指针插入表中,用选项作为表的索引,转移表实现每个可能都是一样快。

转移表通过实例实现,比用干巴巴的文字说明更有意思

下面的例子通过做加减乘除函数的例子来说明转移表的用法

#include

#include

#define M 4

int add(int a, int b);

int sub(int a, int b);

int mul(int a, int b);

int div(int a, int b);

//此为转移表

int (*oper_func[])(int, int) = {

add, sub, mul, div

};

/*指针函数数组声明返回INT

型指针数组*/

char oper_sequence[M][10] = {

"add", "sub","mul", "div"

};

int main()

{

char oper[10];

int seq;

int a,b;

int result;

int i;

printf("Operator:");

scanf("%s",oper);

printf("a:");

scanf("%d",&a);

printf("b:");

scanf("%d",&b);

for(i=0; i

{

if(strncmp(oper_sequence[i], oper, 3) == 0)

seq = i;

}

/* strncmp

功 能: 串比较

用 法: int strncmp(char *str1,char *str2, int maxlen);

说明:此函数功能即比较字符串str1和str2的前maxlen个字符。如果前maxlen字节完全相等,

返回值就=0;在前maxlen字节比较过程中,如果出现str1[n]与str2[n]不等,则返回(str1[n]-str2[n])[1]。

*/

result = oper_func[seq](a, b);

printf("result is %d/n", result);

return 0;

}

int add(int a, int b)

{

return a+b;

}

int sub(int a, int b)

{

return a-b;

}

int mul(int a, int b)

{

return a*b;

}

int div(int a, int b)

{

return a/b;

}

说明

(1)转移表还可以插入默认的选项,只不过需要人工编码。

(2)还可以手动减小取值的范围

分享到:

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C语言实现双向链表删除节点、插入.. 下一篇C语言:va_start、va_end、va_arg..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: