I understood multi-dimensional arrays as pointers to pointers, but perhaps I am wrong?
For example, I though:
char * var = char var[]
Not looked in too much detail but I think the author is relying upon c laying out a 2d string array like this:
key, value, key, value, key, value in contiguous memory. Then traversing this array as a 1d array of strings p = (char **)dic;
This is one of the beauties and potential problems with C - it has lots of low level power but the you have protect yourself with decent code to prevent side effects.