Поскольку объявления в 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]
.