Для int (*p)(char (*a)[]);
:
(*p)(char (*a)[])
- это int
. - Так что
(*p)
- это функция, возвращающая int
и принимающая параметр типаchar (*a)[]
.(Подробнее о последнем ниже.) - Итак,
*p
- это та же функция. - Итак,
p
- указатель на эту функцию. - В
char (*a)[]
, (*a)[]
- это char
. - Итак,
(*a)
- это массив char
с неизвестным размером. - Так что
*a
- это тот же массив. - То есть
a
- это указатель на массив char
с неизвестным размером. - Так что
p
- это указатель на функцию, возвращающую int
, которая принимает параметр, который является указателем намассив char
с неизвестным размером.
Для int *p(char (*a)[]);
:
*p(char (*a)[])
является int
. - Итак
p(char (*a)[])
- это указатель на int
. - Так что
p
- это функция, которая возвращает указатель на int
и принимает параметр типа char (*a)[]
. - выше, мы знаем, что параметр является указателем на массив
char
неизвестного размера. - Так что
p
- это функция, которая возвращает указатель на int
и принимает параметр, который является указателемв массив char
с неизвестным размером.