Что означает "char (* a) [12]"? - PullRequest
3 голосов
/ 10 июня 2010

Это из стандарта C?

Ответы [ 4 ]

15 голосов
/ 10 июня 2010

Если вас смущает объявление C, вы можете использовать программу cdecl, чтобы объяснить это:

~$ cdecl
Type `help' or `?' for help
cdecl> explain char (*a)[12];
declare a as pointer to array 12 of char
3 голосов
/ 10 июня 2010

Поскольку объявления в C следуют правилам приоритета операторов (т. Е. Подписка на массив оценивается перед косвенным обращением), вам понадобятся парены для объявления указателей на типы массивов.

Во многих случаях использования на самом деле нет никакого практического преимущества по сравнению с простым char *, за исключением того, что это способ применения размера массива, особенно при использовании в качестве параметра функции:

void foo(char bar[42]);

эквивалентно

void foo(char *bar);

и принимает любые char *, тогда как

void foo(char (*bar)[42]);

будет принимать только указатели на массивы размером 42.

Поскольку доступ к элементам bar в последнем случае обременителен, было бы неплохо сразу определить эквивалент char * в теле функции

char *baz = *bar;

, чтобы вы могли использовать прямую подписку baz[13] вместо (*bar)[13].

3 голосов
/ 10 июня 2010

Указатель на массив из 12 символов.

1 голос
/ 10 июня 2010

a - указатель, указывающий на array of 12 characters.

...