c - 为什么这不适用于 C 中的哈希表(指针)

标签 c pointers hashtable

目标是允许 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/

相关文章:

c - 看来基于堆栈的变量在 C 函数之后没有被释放

c - 如何使用void*?

c - c中的静态矩阵乘法到动态矩阵

c - Glib HashTable 未正确插入

java - HashSet 和 HashMap 都使用 Hashtable 吗?或者Hashtable是完全不同的数据结构?

c - 使用 C 中的表达式树计算后缀表达式

c - C 混淆中的结构

c - 如何使指向全局结构数组的指针

python - 在 Python 中对嵌套字典进行排序

字符数组赋值给另一个字符数组