首页 > 代码库 > 使用哈希算法将数字解析为函数指针-一种架构方法
使用哈希算法将数字解析为函数指针-一种架构方法
使用哈希算法将数字解析为函数指针:
这也算是最简单的,不会带有地址冲突的哈希了,哈希函数可以描述为:
func = arr[index].func
index为输入,根据输入的index,找到其对应的函数指针返回
这种架构虽然简单,但是在做测试时还是非常有用的
比如一种测试有几十项,我可以使用这种架构来实现自动轮巡测试,或者手动交互时输入一个Index,即可以去调用对应的测试函数
另外根据这个代码,还可以学习到函数指针的定义和使用:
定义:typedef int (*FuncPtr)(char *str);
使用:
FuncPtr MainPtr;
char *str = "test string!";
MainPtr = hashFunc(1);
MainPtr(str);
源码如下:
root@ubuntu:/mnt/shared/appbox/hashfun# cat hashfun.c #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> typedef struct { int index; int (*func) (char *str); }HashSt; typedef int (*FuncPtr)(char *str); int func0(char *str); int func1(char *str); HashSt HashStArr[] = { {0, func0}, {1, func1}, }; int func0(char *str) { printf("func1, str:%s!\n", str); return 0; } int func1(char *str) { printf("func2, str:%s!\n", str); return 0; } /* * hash function: func(index) = HashStArr[index].func */ FuncPtr hashFunc(int index) { return HashStArr[index].func; } int main(int argc, char *argv[]) { FuncPtr MainPtr; char *str = "test string!"; MainPtr = hashFunc(1); MainPtr(str); MainPtr = hashFunc(1); MainPtr(str); return 0; } root@ubuntu:/mnt/shared/appbox/hashfun#输出如下:
root@ubuntu:/mnt/shared/appbox/hashfun# ./hashfun func2, str:test string!! func2, str:test string!!
main函数可以优化为:
int main(int argc, char *argv[]) { FuncPtr MainPtr; char *str = "test string!"; int i; for(i=0; i<2; i++) { MainPtr = hashFunc(i); MainPtr(str); } return 0; }
输入同样为:
root@ubuntu:/mnt/shared/appbox/hashfun# ./hashfun func1, str:test string!! func2, str:test string!!
使用哈希算法将数字解析为函数指针-一种架构方法
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。