sorry i dont understand double indirection that well. i can understand basic pointers and references but get confused when they start piling up. my textbook doesnt discuss it much.
If you understand the concept, then it really isn't that difficult.
A pointer just points to something else. If you have ** pointers, that just means they point to other pointers:
1 2 3 4 5 6 7 8
int* p; // p points to an int
// 'p' is an int*
// '*p' is an int
int** pp; // pp points to an int* (points to a pointer)
// 'pp' is an int**
// '*pp' is an int*
// '**pp' is an int