c 将外部函数函数分配给变量

标签 c functional-programming function-pointers

我有一个结构,其中包含一个函数变量,我想为其分配一个函数,它本身在全局级别上是可见的,如下所示:

typedef struct HashMap{
    struct LinkedList** datapointers;
    int key_space;
    int* (*hash_function)(const char*);
}HashMap;
unsigned int hashfunction(const char* input){
    int i=0;
    int hash=0;
    while(input[i]){
        hash=hash+input[i]; 
        i++;
    }
    return hash;
}
//create a new hashmap 
HashMap* create_hashmap(int key_space){
    HashMap *hm = malloc (sizeof(HashMap));
    hm->datapointers = malloc(sizeof(LinkedList)*key_space); //array of linked lists 
    hm->key_space=key_space; 
    for(int i=0;i<key_space;i++){ //initalize to NULL 
        hm->datapointers[i]=NULL;
    }
    hm->hash_function=*hashfunction;
    return hm;
}

现在无论我做什么,我都会收到无效指针或未声明的变量。有什么办法可以让它正常工作吗?

谢谢

最佳答案

你的代码应该是这样的

hm->hash_function = hashfunction;

但是,有一个不匹配。

函数指针类型为int* (*hash_function)(const char*);

但是你的函数签名是

unsigned int hashfunction(const char* input)

海事组织,应该是

  1. int* hashfunction(const char* input) [需要相应修改函数定义]

  1. unsigned int (*hash_function)(const char*);

关于c 将外部函数函数分配给变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27188584/

相关文章:

c++ r值引用应用于函数指针

c - 在 Cortex 中,如何将单个字节转换为字?

c:使用函数将新节点插入到单链表中

c++ - 零长度位域的实际使用

C: printf 不打印用户输入的答案

haskell - 在 Haskell 中将 foldr 与 OR 混合(懒惰?)

javascript - 创建闭包和 some_func.bind(this) 之间的性能差异

Java:在功能接口(interface)中通过反射调用方法

c - 如何在C中使用两个返回不同类型的函数作为函数指针?

c++ - std::function 可以用来存储带有可变参数的函数吗