un puntero toma la direccion de memoria de una variable, mientras que un doble puntero toma la direccion de memoria de un puntero y los triple punteros apuntan a la direccion de un doble puntero
int a = 1;
int *p1 = &a;
int *p2 = p1;
int **p3 = &p2;
int ***p4 = &p3;
entonces p1 y p2 tendria la direccion de a, mientras que p3 tendria la direccion de p2 y p4 tendria la direccion de p3.
int a = 1;
int *p1 = &a;
int *p2 = p1;
int **p3 = &p2;
int ***p4 = &p3;
entonces p1 y p2 tendria la direccion de a, mientras que p3 tendria la direccion de p2 y p4 tendria la direccion de p3.