В результате получился массив функций, доступ к элементам этого массива обычный, например:
int i =0;
fcmp [i] ( pt1,pt2 ); //это вызов функцииgod ( pt1, pt2);
Следует обратить внимание, что заменив индекс, можно вызвать другую функцию и т.д.
Помимо возврата результата выполнения функций в виде данных по значению, возможен также возврат с помощью операций разыменования "*" или получения адреса "&".
Операция разыменования "*"означает, что функция возвращает адрес на объект. Функции в таком случае объявляются как указатели на функцию, т.е. в следующем виде:
type * fname(список формальных аргументов) .
Описанные таким образом функции должны возвращать указатель на тип (адрес), например:
char dayweek (int data)
{
static char *weekday[ ] = {"Sunday", "Monday", "Tuesday",
"Weduesday", "Thursday", "Friday", "Saturday"}
return weekday [data % 7];
}
Здесь функция dayweek получает значение data,т.е. число дней, прошедших с какой-то определенной даты, и возвращает день недели в виде указателя на charпоскольку weekday ¾ это массив указателей на char, который принадлежит типу char*.
При объявлении функции как указателя на функцию результат можно передавать путем получения адреса, обозначаемого "&". Такая функция будет иметь следующую структуру:
type *funame (список формальных аргументов)
{
static type x;
//далее следуеттело функции
return &x;
}
Поскольку значением указателя является адрес, то функция может возвратить адрес объекта того же типа, что и тип возвращаемого указателя. Если необходимо возвратить результат функции по ссылке, то предпочтительнее использовать операцию получения адреса "&", и функцию описывать в виде :
type funame (список формальных аргументов) .