Int (*fcmp[4]) () {god, chena, nazv, avtor} ; .

 

В результате получился массив функций, доступ к элементам этого массива обычный, например:

 

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 (список формальных аргументов) .