V jazyku C je při deklaraci proměnné typu ukazatel na funkci nutné vždy
specifikovat také počet a typy parametrů funkce a typ návratové hodnoty.
Příklad deklaracedefinice:
// v------v----------- priotita! double (*p_fdd)(double); // ^------^--- typ
: odkaz na to, jak se čtou deklarátory/typy!!!
Uvědomte si: ( závorky ) představují 4 různé operátory:
Proměnná p_fdd je ukazatel na funkci s jedním paramaterm typu double vracející
hodnotu typu double.
Příklad deklaracedefinice s inicializací:
double polynomA(double x){ return 3 * x * x + 4 * x - 10; } double (*p_fdd)(double) = polynomA;
Příklad deklarace pomocí typedef:
typedef double (*P_FDD)(double); P_FDD p_fdd = polynomA;
Příklad přiřazení adresy funkce ukazateli:
p_fdd = polynomA;
Příklady volání funkce pomocí ukazatele:
v = (*p_f)(-1); v = p_f(-1);
Obě výše uvedené možnosti volání funkce pomocí ukazatele na tuto funkci se nijak neliší, v praxi se používá druhá varianta, která je jednodušší.
Ukazatele na funkce umožňují vytváření funkcí vyšších řádů, jejichž výpočet je možné za běhu programu modifikovat pomocí funkcí, které jim jsou předány při jejich volání jako parametr. Příklad definice:
double *map(double (*fce)(double), double *vstup, int pocet) {...}
Příklad volání funkce:
double na3(double x){ return x * x * x; } ... pole_vysledku = map(na3, pole_vstupni, velikost_vstupni); //Příklad použití ukazatele na funkci při volání: double (*p_na3)(double) = na3; ... pole_vysledku = map(p_na3, pole_vstupni, velikost_vstupni);
Stejně jako u všech dříve zmíněných datových typů, je i z ukazatelů na funkce (se stejným počtem a typy parametrů a stejným typem návratové hodnoty) možné vytvářet pole (i vícerozměrná). Příklad deklarace pole ukazatelů na funkce:
double(*pole_fci[5])(double);
Příklad deklarace s inicializací:
double(*pole_fci[])(double) = {na3, na4, sin, cos, tan};
Příklad deklarace s použitím dříve definovaného typu:
P_FDD pole_fci[] = {na3, na4, sin, cos, tan};
Příklad volání funkce z pole:
vysledek = pole_fci[1](-1);
cc,upol