Is this from the C standard?
If you're confused by a C declaration, you can use the cdecl
program to explain it:
~$ cdecl
Type `help' or `?' for help
cdecl> explain char (*a)[12];
declare a as pointer to array 12 of char
Because declarations in C follow the operator precedence rules (ie array subscription is evaluated before indirection), you'll need parens to declare pointers to array types.
In many use cases, there's not really any practical benefit over using a plain char *
, except that it's a way to enforce the array size, especially when used as a function parameter:
void foo(char bar[42]);
is equivalent to
void foo(char *bar);
and accepts any char *
, whereas
void foo(char (*bar)[42]);
will only accept pointers to arrays of size 42
.
As accessing the elements of bar
in the latter case is cumbersome, it might be a good idea to immediately define an equivalent char *
in the function body
char *baz = *bar;
so that you can use direct subscription baz[13]
instead of (*bar)[13]
.