Since declarations in C follow the rules of operator precedence (for example, subscribing to an array is evaluated indirectly), you will need parsers to declare pointers to array types.
In many cases, there is no practical advantage when using simple char *, except that this is a way to ensure the size of the array, especially when using the function as a parameter:
void foo(char bar[42]);
equivalently
void foo(char *bar);
and accepts any char *, whereas
void foo(char (*bar)[42]);
will only accept pointers to size arrays 42.
bar , char *
char *baz = *bar;
baz[13] (*bar)[13].