void* is called the generic pointer --- every pointer is 4 bytes (32-bit os) so that you can cast between different pointer types.*((int*)p) = 3;only says that the content of the memory location to which p points is 3.It does not say p is a void*, or a int*.