In C++, pointers are strongly-typed. Therefore, you can’t assign a void pointer to any other pointer type without casting it explicitly:
int n;void *p = &n;int *pi=static_cast< int* >(p);//C++ requires explicit cast
In C, the explicit typecasting is not required. By contrast, you can assign any data pointer to void* without casting:
string s;void *p=&s; // no cast required here