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 by using the type void *
, where the
keyword void
represents the absence of
specific type information, or by using the built-in type alias
uintptr_t
, which is aliased to an unsigned
integer type of size that is 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
can 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 can
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.