Вы можете объявить его как extern char (*p)[];
, но это неполный тип . Это, конечно, потому что C не имеет тип «массив» в целом, который является полным типом; полными являются только массивы определенного размера.
Следующие работы:
extern char (*p)[];
char arr[20];
char (*p)[20] = &arr; // complete type now: p points to an array of 20 chars