整理自 Thinking in C++。
If you state that a pointer is a
void *, it means that any type of address at all can be assigned to that pointer (whereas if you have an
int *, you can assign only the address of an
int variable to that pointer). For example:
void *vp; char c; int i; // The address of ANY type can be assigned to a void pointer: vp = &c; vp = &i;
Once you assign to a
void * you lose any information about what type it is. This means that before you can use the pointer, you must cast it to the correct type:
int i = 99; void *vp = &i; // CANNOT dereference a void pointer: // *vp = 3; // Compile-time error // MUST cast back to int before dereferencing: *((int*)vp) = 3; // OK
There’s one last item to mention. In C, you could assign a
void* to any other pointer. But in C++, this is not allowed because of stricter type check.
int i = 10; void* vp = &i; // OK in both C and C++ int* ip = vp; // ONLY acceptable in C
void pointers should be avoided, and used only in rare special cases.
You CANNOT have a