I never really messed with learning much about pointers to pointers or their uses....nor did I really ever see a use for pointers to function addresses either.
Pointers/memory management are the hardest concepts of C and C++, hands down. There are so many different uses and syntax for them. I never really saw a need to have a pointer to a pointer....what's the use? I assume it's useful to produce a tree effect with your pointers, and the **p would be like a root node....or I could be wrong. I also heard that **p is useful in keeping collections of const char *strings.
At any rate, pointers never were my strong point, but I'd like to master them so I can put the worst of C/C++ behind me. A lot of code for advanced applications or in APIs is very pointer-intensive. Not that I don't understand that particular code....but I'm just not yet a master of everything pointer.