目标是允许 C 中的哈希表处理复杂的键,例如结构或字符串。
char *key="hello";
struct stuff value;
/*initialize value */
hashtable_put ((int)key, (int&value));
struct stuff *p = (struct stuff *)hashtable_get((int)"hello");
assert((*p)==value);
我提供的解决方案是行不通的,因为比较和散列键和指针不一样。为了使其工作,您必须将键比较和键散列函数传递给 hashtable_create()。有人可以解释这是为什么吗?
最佳答案
指针仅指向内存中的位置。位置表示为内存中的地址、整数值、字节数。它不携带任何其他信息。当您使用 char *key="hello";
创建字符串时,您将获得内存中放置此文本的位置以及指向该位置的指针。当您创建两个字符串时,
char *key_a="hello";
char *key_b="hello";
您将获得两个不同的位置、两个不同的整数值,但是仍然是相同的文本。 因此,您不能使用该值作为键,因为两个不同的地址可以保存相同的值。
关于c - 为什么这不适用于 C 中的哈希表(指针),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23375657/