4
我想定义一个带有可交换散列函数的散列表。散列函数将采取一个指针到哈希表和密钥被散列,返回像这样一个int:函数指针的typedef的循环引用C
typedef int (hash_function_t) (hashtable *, int);
在散列表中存储有指针将被用于散列键功能:
typedef struct ht {
size_t size;
...
hash_function_t *hash_function;
} hashtable;
不幸的是,这会创建一个循环引用。
我需要指向散列表函数定义中的散列表,所以我可以对散列表大小做一个模数,所以它不会超过最大数量的存储区。我需要散列表中的散列函数,以便我不必将散列函数指针传遍整个地方。
我意识到这将导致这样的代码:
*ht->hash_function (ht, key)
这是一个有点古怪,但我很好这一点。
以任意顺序放置typedefs不起作用。我必须在散列表中使用长定义,然后再进行typedef,还是有更好的方法?
这是所有旨在直C,没有C++。 ANSI C解决方案是首选!
哈!很好很简单。不知道你可以声明,然后'重新声明'一个结构。非常感谢! – majelbstoat 2010-12-11 09:46:21
现在你做到了! :-)当我学习C并实现链表时,我遇到了同样的问题... – 2010-12-11 09:47:40