Just trying to really get my head round Arrays and Pointers in C and the differences between them and am having some trouble with 2d arrays.
For the normal 1D array
See this answer in the C FAQ:
There it is explained for char [] vs char *. The same thing can be extended to char *[] vs char **.
char []
char *
char *[]
char **