取消引用指向void的指针

时间:2011-10-24 07:21:33

标签: c hashmap

我正在使用C语言实现散列映射,CMapPut的函数定义如下:

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

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

2 个答案:

答案 0 :(得分:0)

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

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);

答案 1 :(得分:0)

将您的void *投射到您的合适类型,如其他人所述。其次,您不必const属性elemAddr。这没用,因为你可能想要返回一个非const指针。