Sneaky pointer pointing pointers?

This probably needs one of the more experienced developers to answer, because they have the all mighty knowledge in there brains.

How do you define a dynamic pointer to an array of characters.
I thought it would have been:

char * pCharArray[32];

but after doing alot of research on a similar thing,
I came across a few cases where it said that the statement above actually creates 32 character pointers,
and not a pointer to an array of 32 characters.
And to correctly define a pointer to an array of 32 characters you need to specify it like this:

char (* pCharArray)[32];


Can anyone tell me if this is correct.
And if it is, are there any actual differences between the two,
or do they act the exact same for all things?