Pointer-to-pointer is a thing.
However, anything you point to must have “storage.”
Rvalues don’t have “storage” so you can’t take the address of them.
&v returns a rvalue of type pointer, so you can’t directly take the address of that; you have to give it “storage,” which you do by storing it into the heap, or into a variable.
int v1 = 5;
int *pv = &v1;
int **ppv = &pv;
printf(**ppv); // prints 5;
int v2 = 6;
pv = &v2;
printf(**ppv); // prints 6;