Сначала вы должны найти фактическую переменную, которая объявляется. Во всех трех примерах это fpData
. Затем вы должны начать читать объявление, начиная с этой переменной, перемещаясь изнутри наружу.
Итак, давайте начнем с первого примера. Мы видим fpData
, поэтому мы говорим "fpData is ...", затем мы видим "*" перед "fpData", поэтому мы говорим "fpData является указателем на ...", затем мы видим объявление типа функции вне *fpData
, поэтому мы говорим "fpData - указатель на функцию ...". Затем мы должны прочитать типы аргументов и результат этой функции.
Ну, вы можете читать типы для всех 3 аргументов без проблем. Это:
- "paIndex - указатель на массив длиной 3 дюйма"
- "fpMsg - указатель на функцию от
const char *
до int"
- "fpCalculation - массив длиной 3 указателя для работы от
const char *
до int"
В последнем аргументе вы должны заметить, что [3]
имеет более высокий приоритет, чем "*". Я имею в виду, что при чтении декларации изнутри наружу вы должны прочитать сначала массив, а затем указатель. И. е. int *a[3]
- это "a это массив длиной 3 из указателей типа int", а не "указатель на массив".
Предполагая, что все это, я думаю, вы можете прочитать 2-е объявление без проблем.
Теперь вы должны изучить это: тип результата функции записывается вне (т.е. ДО и ПОСЛЕ) всего остального.
Давайте рассмотрим это:
char (*(*fp)(int))(double)
Что это значит? Что ж, давайте начнем читать: «fp - указатель на функцию, которая принимает int и возвращает ... что?» Ну, мы уже прочитали (*fp)(int)
часть. Теперь мы хотим прочитать все остальное. И мы хотим понять, какой тип результата мы уже прочитали. И теперь мы должны отметить, что результатом функции является то, что написано ВНЕ (т. Е. ДО и ПОСЛЕ) всего остального, т.е. е. за пределами того, что мы уже прочитали.
Итак, мы прочитали (*fp)(int)
. Все остальное, я. е. char (*XXX)(double)
- это тип возвращаемого значения для функции, которую мы уже прочитали. Итак, давайте продолжим читать. Наконец мы получим это:
"fp - указатель на функцию, которая получает int и возвращает указатель на функцию, которая получает double и возвращает char".
Теперь вы можете читать 3-ю декларацию без проблем