The two concepts are orthogonal:
- A void pointer, (
void *
) is a raw pointer to some memory location. - A null pointer is a special pointer that doesn’t point to anything, by definition. It can be a pointer to any type, void or otherwise.
A void pointer can be null or not:
void *void_ptr1 = nullptr;
void *void_ptr2 = malloc(42);
void *void_ptr3 = new Foo; // void * can point to almost anything
void *void_ptr4 = (char*)void_ptr3 + 1; // even somewhere inside an object
A non-void pointer can also be null or not:
Foo *f = nullptr;
Foo *g = new Foo;