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.