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);

Creative Commons License Sbírka úloh z jazyka C. © Katedra informatiky Univerzity Palackého v Olomouci, 2009.
Projekt byl vytvořen za podpory grantu FRVŠ 2061/2009/G1.