【问题标题】:Dereferencing pointer to void取消引用指向 void 的指针
【发布时间】:2011-10-24 07:21:33
【问题描述】:

我正在用 C 实现一个 hashmap,CMapPut 的函数定义如下:

void CMapPut(CMap *cm, const char *key, const void *elemAddr) 

我的问题是如何检索传递给地图的元素的实际值?也就是客户端传入变量的时候,传入的是值的地址。在这种情况下,它似乎是 void *,当然您不能取消引用 void *。有什么建议吗?

【问题讨论】:

  • 转换为您的数据类型指针。
  • 当然,您必须自己了解数据类型。有些语言具有跟踪数据类型的功能,但 C 不是其中之一。

标签: c hashmap


【解决方案1】:

您应该能够将指针转换为您需要的类型:

typedef struct {
    ...
} CMyType;

...

CMyType myinstance;
CMapPut(cm, "key", &myinstance);

我猜你会将指针存储为const void*。我猜你有一个像CMapGet 这样的函数,你可以像这样检索你的映射对象:

void *CMapGet(CMap *cm, const char *key);

...

CMyType* myinstance_ptr = CMapGet(cm, key);

【讨论】:

  • 为了扩展这一点,在你的 CMapPut 函数中,你可以这样做:const ActualValueType value = *((ActualValueType*)elemAddr);
【解决方案2】:

如其他人所述,将您的 void * 转换为您的适当类型。其次,你不必const你的属性elemAddr。这没有用,因为您可能无论如何都想返回一个非常量指针。

【讨论】:

    猜你喜欢
    • 2012-03-25
    • 2011-10-20
    • 2021-07-19
    • 2015-01-04
    • 1970-01-01
    • 1970-01-01
    • 2011-06-17
    • 1970-01-01
    • 2017-11-03
    相关资源
    最近更新 更多