Pointers to type void can be converted to pointers to any other type, but only with an explicit type cast. (See “Expressions with Explicit Type Conversions” in Chapter 4, on topic for more information about type casts). A pointer to any type can be converted implicitly to a pointer to type void.
A pointer to an incomplete object of a type can be converted to a pointer to void and back. The result of such a conversion is equal to the value of the original pointer. An incomplete object is an object that is declared, but for which insufficient information is available to determine its size.