это не «двойной указатель», как вы упоминаете. скорее это называется «разыменование».
int x = 10;
int* prev = &x;
* prev - адрес переменной x.
теперь допустим, что вам нужно передать адрес переменной указателя prev другой функции с именем foo, которая принимает адрес указателя в качестве своего параметра (указатель на указатель).
void function foo(int** ptr)
{
prinft("%p", ptr); //this would print the address of prev
printf("%p", *ptr); //this would print the value (the address of x) contained inside address contained inside ptr.
printf("%d", **ptr); //this would print the value (the value of x, 10) contained at the address(address of x) contained inside address (address of prev) contained inside ptr
}