Если int
не определен как макрос, int * (*) (int *)
не содержит ни констант, ни идентификаторов, поэтому не может быть выражением.Скорее, это тип .В частности, это тип указателя на функцию, которая принимает один параметр типа int *
и возвращает значение типа int *
.Например, он совместим с указателем на эту функцию:
int *foo(int *x) {
return x + 1;
}
Вы можете использовать его в выражении typecast, например, в этом надуманном примере:
int *(*p)() = foo;
int *(*p2)(int *) = (int * (*)(int *)) p;
// here ------------^^^^^^^^^^^^^^^^^^