【问题标题】:c function pointers explanationc函数指针解释
【发布时间】:2011-12-26 09:03:21
【问题描述】:

我找到了一些我需要用于我的应用程序的代码,但其中有两行我无法弄清楚它们究竟是做什么的以及如何...请向我解释或指导我一个链接,以便我可以阅读更多相关信息。

Dict* dcreate(hash_size size, hash_size (*hashfunc) (const char *));

这里我猜它是传递一个函数作为参数,它的参数在下面的括号中!?

hash_size i = dict->hashfunc(key) % dict->size;

在这里,我的猜测和我的狗一样好!

hashfunc:

static hash_size def_hashfunc(const char* key){
    hash_size s = 0;
    while(*key){
        s += (unsigned char) *key++;
    }
return s;
}

谢谢。

【问题讨论】:

  • 他们所说的。此外,您的标签中有“哈希”,但函数的作用并不重要;这种机制对于非散列相关的函数也是一样的!

标签: c function parameters function-pointers


【解决方案1】:

对于第一行,您的猜测是正确的。这是接受两个参数的函数的标头,其中一个是hash_size 类型,另一个是指向参数为const char* 并返回hash_size 的函数的指针。

在第二行中,dict 似乎是一个指向结构的指针,因此dict->hashfunc(key) 调用函数hashfunc,指向该函数的指针存储在dict 结构中。最后一部分(... % dict->size)只是模运算。

【讨论】:

    【解决方案2】:
    hash_size (*hashfunc) (const char *)
    

    是一个函数指针

    hashfunc 是一个指向函数的指针,该函数接收 const char * 作为参数并返回类型 hash_size

    【讨论】:

      【解决方案3】:

      它只传递一个函数指针作为参数。以下是应该传递的函数类型的定义:

      hash_size (*hashfunc) (const char *)
      

      例如接收const char * 并返回hash_size 的函数。

      【讨论】:

        【解决方案4】:

        这是一个函数指针

        hash_size (*hashfunc) (const char *)
        

        这样 dcreate() 将分配一个 Dict 并填充其字段 hashfunc,如下所示:

        Dict * dict = (Dict *) malloc(sizeof(Dict));
        dict->hashfunc = hashfunc;
        

        然后你可以调用dict->hasfunc(const char *),它会返回hash_size。

        hash_size i = dict->hashfunc(key) % dict->size;
        

        确实如此:

        hash_size i =  ( dict->hashfunc(key) ) %  ( dict->size ) ; 
        

        【讨论】:

          猜你喜欢
          • 2013-04-14
          • 2014-11-26
          • 2013-08-19
          • 2022-12-05
          • 1970-01-01
          • 2022-06-14
          • 2011-01-16
          • 2013-03-15
          相关资源
          最近更新 更多