这里提供一种简单的例子:

#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;
}

这个例子实现了一个简单的哈希表,可以通过字符串键值查找对应的函数指针。哈希函数使用了一个简单的字符串哈希算法,插入和查找操作都是在哈希表中寻找对应的链表节点进行操作。

用c实现通过hash地址查找函数地址

原文地址: http://www.cveoy.top/t/topic/bnnu 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录