Описание тега void-pointers
Пустой указатель (void*
) в c и C++ - это указатель, указывающий на ячейку памяти без указанного типа. Аvoid *
обычно используется для обмена указателями, когда некоторая вызываемая функция может не заботиться о типе аргумента, который она получает - например, функции, которые работают с необработанной памятью (например, realloc
а также bzero
) и функции, которые передают указатель без необходимости обращаться к нему (например, обратные вызовы GTK+).
В C использованиеvoid *
считается идиоматическим до тех пор, пока с указателем не выполняются неопределенные операции (такие как разыменование его или выполнение над ним арифметики указателя), поскольку в C отсутствуют типобезопасные обобщения. Если не работают с библиотеками C, пользователям C++ следует избегатьvoid *
и используйте вместо них шаблоны, так как компиляторы могут обнаруживать использование шаблонов, которые не являются типобезопасными.
Обратите внимание, что в стандартном C вы не можете выполнять арифметические операции с void *
; компилятор GNU C допускает такую арифметику как (непереносимое) расширение.