gpt4 book ai didi

C中函数指针typedef的循环引用

转载 作者:太空狗 更新时间:2023-10-29 15:16:58 26 4
gpt4 key购买 nike

我想定义一个带有可交换哈希函数的哈希表。散列函数将采用指向散列表的指针和要散列的键,返回一个 int,如下所示:

typedef int (hash_function_t) (hashtable *, int);

哈希表存储指向将用于哈希键的函数的指针:

typedef struct ht {
size_t size;
...
hash_function_t *hash_function;
} hashtable;

不幸的是,这会产生循环引用。

我需要在哈希函数定义中指向哈希表的指针,这样我就可以对哈希表大小进行取模,这样它就不会超过最大桶数。我需要哈希表中的哈希函数,这样我就不必到处传递哈希函数指针。

我意识到这会导致代码如下:

*ht->hash_function (ht, key)

这有点奇怪,但我同意。

按任一顺序放置 typedef 都不起作用。我是否必须在哈希表中使用长定义,然后再进行 typedef,还是有更好的方法?

这一切都是为了直接使用 C,而不是 C++。首选 ANSI C 解决方案!

最佳答案

您可以先声明结构,然后再在定义中使用它。这告诉编译器该结构存在,但稍后将对其进行完整定义。像这样:

/* declare it first */
struct ht;

typedef int (hash_function_t) (struct ht *, int);

typedef struct ht {
size_t size;
...
hash_function_t *hash_function;
} hashtable;

关于C中函数指针typedef的循环引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4416084/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com