/*
Pointer to pointer (**pp) is a pointer variable which holds the address
of another pointer variable (*p).
*/
#include <stdio.h>
int main(void)
{
int n = 13, *p = &n, **pp = &p;
printf("n = %d (n)\n", n);
printf("*p = %d (*p = &n)\n", *p);
printf("**pp = %d (**pp = &p)\n\n", **pp);
printf("&n = %p (n)\n", &n);
printf("p = %p (*p = &n)\n", p);
printf("*pp = %p (**pp = &p)\n\n", *pp);
printf("&p = %p\n", &p);
printf("pp = %p (**pp = &p)\n\n", pp);
printf("&pp = %p\n", &pp);
return 0;
}
/*
run:
n = 13 (n)
*p = 13 (*p = &n)
**pp = 13 (**pp = &p)
&n = 0x7ffcbff9f444 (n)
p = 0x7ffcbff9f444 (*p = &n)
*pp = 0x7ffcbff9f444 (**pp = &p)
&p = 0x7ffcbff9f448
pp = 0x7ffcbff9f448 (**pp = &p)
&pp = 0x7ffcbff9f450
*/