【问题标题】:Nested definition within a struct结构内的嵌套定义
【发布时间】:2015-04-20 11:46:05
【问题描述】:

就嵌套函数而言,我无法理解输入和输出的用途 unsigned long int(*hash)(char *); 是... 这个嵌套函数是否接收一个字符串并输出一个指向 unsigned long int 的指针?

谢谢!

struct hash_table {
  unsigned long int(*hash)(char *);
  unsigned int n_buckets;
  sll **buckets; /* an array of pointers to string lists */
};

【问题讨论】:

    标签: c struct hashtable nested-function


    【解决方案1】:
    unsigned long int(*hash)(char *);
    

    是一个函数指针。

    How function pointers work

    【讨论】:

    • 谢谢。如果我想将此指针 malloc 指向堆,我应该分配多少内存来容纳它?
    • @Leeho Lim 以防万一:您确定要分配 指针 吗?我的意思是如果你有一个struct hash_table variable;,你已经在变量里面有了指针。剩下要做的就是为该指针分配一些适当的函数地址。
    • 哦,明白了,我现在明白它是如何工作的了!谢谢。
    【解决方案2】:

    结构中的hash 成员不是嵌套函数,而是函数指针。

    函数指针只是指向函数的指针(顾名思义)。由于您在 C 中对函数所做的一切就是调用它们或获取它们的地址,因此您永远不需要为函数本身分配内存。

    你可以用一个合适的函数的地址来初始化它,它可能看起来像:

    static unsigned long int my_hash(char *s)
    {
      return (unsigned long int) *s; /* Very bad hashing! */
    }
    

    然后在别处:

    struct hash_table ht;
    ht.hash = my_hash;
    

    请注意,不需要 &(地址)运算符,因为名称 my_hash 后面没有括号,因此函数名称的计算结果为其地址。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-31
      • 2015-01-11
      • 2022-09-27
      • 1970-01-01
      • 1970-01-01
      • 2021-07-17
      • 1970-01-01
      相关资源
      最近更新 更多