增注意这里的三个参数第一个必须是管理hashtable的原对象。而第二个参数最为特殊必须是和自定义结构体中需要用来作为健的字符串字面量一致。void hash_insert(struct MyHashNode **hashTable, struct MyHashNode *node) { // 在前面的 struct MyHashNode 中作为健的字符串字面量是key // 因此这里的第二个参数是key }删删除操作同样也要是管理hashtable的原对象。但这里的删除仅仅是把hashtable中的记录标记删除而源对象的内存仍然需要手动释放。void hash_erase(struct MyHashNode **hashTable, struct MyHashNode *node) { HASH_DEL(*hashTable, node); free(node); }改hashtable仅做node是否存在的标记并不管理实体对象因此修改操作直接在点中修改即可。通常会配合查找操作一起使用。void hash_modify(struct MyHashNode *node, int value) { node-value value; }查查找操作需要传入与健值形同类型的地址。而返回结果是在第三个参数中进行修改。若查找成功则指向节点地址失败则置为NULL。struct MyHashNode *hash_find(struct MyHashNode *hashTable, int key) { struct MyHashNode *node NULL; HASH_FIND_INT(hashTable, key, node); return node; }