结构中的嵌套定义

时间:2015-02-19 07:59:16

标签: c struct hashtable nested-function

就嵌套函数而言,我无法理解输入和输出的内容 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 */
};

2 个答案:

答案 0 :(得分:1)

unsigned long int(*hash)(char *);

是一个函数指针。

How function pointers work

答案 1 :(得分:0)

结构中的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后面没有括号,函数名称的计算结果为地址。