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

后端 未结 4 1769
失恋的感觉
失恋的感觉 2021-01-06 11:39

Is this from the C standard?

相关标签:
4条回答
  • 2021-01-06 12:11

    A pointer to an array of 12 characters.

    0 讨论(0)
  • 2021-01-06 12:23

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

    0 讨论(0)
  • 2021-01-06 12:26

    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].

    0 讨论(0)
  • 2021-01-06 12:26

    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
    
    0 讨论(0)
提交回复
热议问题