One points at a black hole.
The other points at the thing pointing at the black hole.
They're not really the same thing, but pointers can be converted to void *
. You can convert int *
to a void *
because, well, it's a pointer. void **
is still a pointer (it just points to a pointer), and since it's a pointer, you can convert it to a void *
. That make any sense?
That said, I don't think I've ever had a use for a void **
, but if you needed an array of void *
s, then the type would be void **
. (In C) void *
is often used to hold a pointer to some user data - but you won't know ahead of time what type that data will be. If you had an array of those, then void **
.
Since you also have this tagged as C++: The previous case doesn't really apply: you could use a std::vector<void *>
. Really, void *
might be questionable - an abstract base might fit your purposes better. void *
is useful mostly in C.