Разыменование указателя на void - PullRequest
0 голосов
/ 24 октября 2011

Я работаю над реализацией хэш-карты в C, и функция для CMapPut определяется следующим образом:

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

Мой вопрос заключается в том, как мне получить фактическое значение переданного элементав карту?То есть, когда клиент передает переменные, он передает адрес значения.В этом случае он выглядит как void *, и, конечно, вы не можете разыменовать void *.Любые советы?

Ответы [ 2 ]

0 голосов
/ 24 октября 2011

Приведите ваш void * к вашему подходящему типу, как упомянуто другими. Во-вторых, вам не нужно const ваш атрибут elemAddr. Это бесполезно, так как вы все равно хотите вернуть неконстантный указатель.

0 голосов
/ 24 октября 2011

Вы должны быть способны привести указатель к нужному типу:

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...