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