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