Ukazatele na funkce
Doplňující informace
Deklarace ukazatele na funkci
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 deklarace:
double (*p_fdd)(double);
Proměnná p_fdd
je ukazatel na funkci s jedním paramaterm typu double
vracející hodnotu typu double
.
Příklad deklarace 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;
Práce s ukazatelem na funkci
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šší.
Ukazatel na funkci jako parametr funkce
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);
Pole ukazatelů na funkce
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);