A pointer may point to variable which itself holds another pointer, and this is expressed in the pointer's type:
int i; /*iholds an integer. */ int *ip = &i; /*ippoints toi. */ int **ipp = &ip; /*ipppoints toip. */ int ***ippp = &ipp; /*ippppoints toipp. */ /* et cetera */
The fact that the pointed-to object also holds a pointer does not fundamentally change the behaviour of the pointer that points to it. It just allows a further level of indirection — in practice, you rarely need more than a couple of levels.