开发者

What does "char (*a)[12]" mean?

Is this f开发者_开发百科rom 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].


A pointer to an array of 12 characters.


a is a pointer pointing to an array of 12 characters.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜