用c实现通过hash地址查找函数地址
这里提供一种简单的例子:
#include <stdio.h>
#include <stdlib.h>
#define HASH_TABLE_SIZE 100
typedef struct node {
char* key;
void (*func)();
struct node* next;
} node;
node* hash_table[HASH_TABLE_SIZE];
unsigned int hash(char* key) {
unsigned int hash_val = 0;
while (*key != '\0') {
hash_val = (hash_val << 4) + *(key++);
unsigned int g = hash_val & 0xf0000000;
if (g != 0) {
hash_val ^= g >> 24;
}
hash_val &= ~g;
}
return hash_val % HASH_TABLE_SIZE;
}
void insert(char* key, void (*func)()) {
unsigned int hash_val = hash(key);
node* n = (node*)malloc(sizeof(node));
n->key = key;
n->func = func;
n->next = hash_table[hash_val];
hash_table[hash_val] = n;
}
void* find(char* key) {
unsigned int hash_val = hash(key);
node* n = hash_table[hash_val];
while (n) {
if (strcmp(n->key, key) == 0) {
return n->func;
}
n = n->next;
}
return NULL;
}
void func1() {
printf("This is function 1\n");
}
void func2() {
printf("This is function 2\n");
}
int main() {
insert("func1", func1);
insert("func2", func2);
void (*f1)() = find("func1");
if (f1) {
f1();
}
void (*f2)() = find("func2");
if (f2) {
f2();
}
return 0;
}
这个例子实现了一个简单的哈希表,可以通过字符串键值查找对应的函数指针。哈希函数使用了一个简单的字符串哈希算法,插入和查找操作都是在哈希表中寻找对应的链表节点进行操作。
原文地址: http://www.cveoy.top/t/topic/bnnu 著作权归作者所有。请勿转载和采集!