ответ
int *(*pfp)();
Создает указатель на функцию, которая возвращает Int *. Имя указателя функции - pfp
.
Вот пример:
int* myFunc(void)
{
return NULL;
}
int main(int argc, char**argv)
{
int *(*pfp) (void);
pfp = myFunc;
return 0;
}
Примечание: Поскольку параметры указателя функции не является (недействительным), что вы дали, это означает, что список параметров не указан в C. В C++ это будет означать, что это функция без параметров.
pfp
- указатель на функцию, которая не принимает параметров (или неопределенных параметров в C) и возвращает указатель на int
.
Использование «по часовой стрелке-спиральное» правила является эффективным способом, чтобы расшифровать сложные заявления C (по крайней мере, я нахожу его эффективным):
Использование http://www.cdecl.org/ для этих вещей, если вы не уверены.
Брайан объяснил, «что», но если вам интересно, чтобы почему, вот отрывок из Денниса Ритчи The Development of the C Language:
Второе новшество, которое наиболее четко отличает C от своих предшественников это более полное и особенно его выражение в синтаксисе деклараций. NB предложил базовые типы int и char, а также массивы из них и указатели на них, но никаких дополнительных способов составления. Требуется обобщение: с учетом объекта любого типа должно быть возможно описать новый объект, который собирает несколько в массив, выводит его из функции или является указателем на него.
Для каждого объекта такого скомпонованного типа уже существует способ упоминания базового объекта: индексируйте массив, вызовите функцию, используйте оператор указателя на указателе. Аналогичные рассуждения привели к синтаксису объявления для имен, отражающих синтаксис выражения, в котором обычно появляются имена. Таким образом,
int i, *pi, **ppi;
объявить целое число, указатель на целое число, указатель на указатель на целое число. Синтаксис этих объявлений отражает наблюдение, что i, * pi и ** ppi все дают тип int при использовании в выражении. Аналогично,
int f(), *f(), (*f)();
объявляет функцию, возвращающую целое число, возвращающее указатель на целое число, указатель на функцию, возвращающую целое число;
int *api[10], (*pai)[10];
Объявление массива указателей на целые числа и указатель на массив целых чисел. Во всех этих случаях объявление переменной напоминает ее использование в выражении, тип которого совпадает с именем, указанным во главе объявления.
Для получения дополнительной информации, читайте Стив Фридл в «Reading C type declarations» или Эрик Giguere в «Reading C Declarations: A Guide for the Mystified».
И параметры функции также не указаны. (Если у него не было параметров, это будет 'int * (* pfp) (void); вместо этого.) –