使用哈希算法将数字解析为函数指针:
这也算是最简单的,不会带有地址冲突的哈希了,哈希函数可以描述为:
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!!
原文地址:http://blog.csdn.net/xiangpingli/article/details/42113243