Generic Pointers
Sometimes it is useful to represent or manipulate a generic pointer address
in a D program without specifying the type of data referred to
by the pointer. Generic pointers can be specified using the type void *,
where the keyword void represents the absence of specific type information, or
using the built-in type alias uintptr_t which is aliased to an unsigned
integer type of size appropriate for a pointer in the current data
model. You may not apply pointer arithmetic to an object of type
void *, and these pointers cannot be dereferenced without casting them to another
type first. You can cast a pointer to the uintptr_t type when
you need to perform integer arithmetic on the pointer value.
Pointers to void may be used in any context where a pointer
to another data type is required, such as an associative array tuple
expression or the right-hand side of an assignment statement. Similarly, a pointer
to any data type may be used in a context where a
pointer to void is required. To use a pointer to a non-void
type in place of another non-void pointer type, an explicit cast is
required. You must always use explicit casts to convert pointers to integer
types such as uintptr_t, or to convert these integers back to the
appropriate pointer type.