取消引用指向 void 的指针

发布于 2024-12-11 16:29:06 字数 274 浏览 0 评论 0原文

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

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

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

I am working on an implementation of a hashmap in C, and the function for CMapPut is defined as follows:

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

My question is how do I retrieve the actual value of the element passed into the map? That is, when the client passes in the variables, he passes in the address of the value. In this case it appears to be a void * though, and of course you can't dereference a void *. Any tips?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

云裳 2024-12-18 16:29:06

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

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

You should be able to cast the pointer to the type you need:

typedef struct {
    ...
} CMyType;

...

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

I guess you'll store the pointer as const void*. I guess you have a function like CMapGet, you use to retrieve your mapped objects like this:

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

...

CMyType* myinstance_ptr = CMapGet(cm, key);
望她远 2024-12-18 16:29:06

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

Cast your void * to your appropiate type, as mentioned by others. Second, you don't have to const your attribute elemAddr. It's no use, since you probably want to return a non-const pointer anyway.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文