Когда использовать пустой указатель? - PullRequest
39 голосов
/ 22 июня 2009

Я понимаю использование указателя void для реализации malloc.

void* malloc  ( size_t size );

Может ли кто-нибудь предложить другие причины или сценарии, если это полезно на практике.

Спасибо

Ответы [ 13 ]

1 голос
/ 22 июня 2009

Посмотрите на sqlite3_exec () . Вы запускаете SQL-запрос и хотите каким-то образом обработать результаты (сохранить их в контейнере). Вы вызываете sqlite3_exec () и передаете указатель обратного вызова и указатель void * на любой объект, который вы хотите (включая контейнер). Когда sqlite3_exec () запускается, он вызывает обратный вызов для каждой извлеченной строки и передает этот указатель void *, чтобы обратный вызов мог привести указатель и сделать все, что вы хотели.

Важно то, что sqlite3_exec () не заботится о том, что делает обратный вызов и какой указатель вы передаете. void * как раз для таких указателей.

1 голос
/ 22 июня 2009

Пустые указатели полезны, когда вы пишете код, который должен работать в нескольких операционных системах и который должен быть достаточно независим от базовых API-интерфейсов.

Например, OS X, Windows и Linux имеют базовую концепцию оконного объекта, но все они очень разные. Итак, у меня есть общий код, который передает их как void *, а затем реализует платформы, которые приводят void * к собственному типу (HWND и т. Д.).

Но, да, как уже говорили другие в этой теме, такого рода вещи, безусловно, следует избегать, кроме случаев, когда это необходимо.

0 голосов
/ 26 октября 2009
int (*f) (void);
f =(void*) getprocaddress(dll,"myfunction");

чтобы сделать компилятор счастливым

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...