Ukazatele na funkce jsou speciální typ ukazatele, který ukazuje na adresu funkce v paměti. Jsou užitečné pro volání funkcí dynamicky za běhu programu, pro předání funkcí jako argumentů do jiných funkcí a pro implementaci callback funkcí. V tomto výkladu se podrobně podíváme na použití ukazatelů na funkce v jazyce C a poskytneme konkrétní příklady jejich použití.
Pro deklaraci ukazatele na funkci je třeba definovat datový typ návratové hodnoty a parametry funkce, na kterou ukazatel odkazuje. Poté je možné definovat ukazatel a přiřadit mu adresu cílové funkce.
#include <stdio.h>
// Deklarace funkce
int secti(int a, int b) {
return a + b;
}
int main() {
// Deklarace ukazatele na funkci secti s návratovou hodnotou int a dvěma parametry int
int (*ukazatel_na_funkci)(int, int);
// Přiřazení adresy funkce secti ukazateli na funkci
ukazatel_na_funkci = secti;
// Volání funkce přes ukazatel
int vysledek = ukazatel_na_funkci(5, 3);
printf("Vysledek: %d\n", vysledek); // Výstup: Vysledek: 8
return 0;
}
V tomto příkladu jsme deklarovali ukazatel na funkci ukazatel_na_funkci
, který ukazuje na funkci secti
s návratovou hodnotou int a dvěma parametry int. Poté jsme přiřadili adresu funkce secti
ukazateli a volali jsme funkci přes tento ukazatel.
Ukazatele na funkce jsou užitečné pro předání funkcí jako argumentů do jiných funkcí. To umožňuje dynamické rozhodování o tom, kterou funkci volat v závislosti na různých podmínkách.
#include <stdio.h>
// Deklarace funkce, která přijímá ukazatel na funkci jako argument
void proveFunkci(int (*ukazatel_na_funkci)(int, int)) {
int vysledek = ukazatel_na_funkci(10, 5);
printf("Vysledek: %d\n", vysledek);
}
// Deklarace funkce, která bude předána jako argument
int vynasob(int a, int b) {
return a * b;
}
int main() {
// Předání funkce vynasob jako argument do funkce proveFunkci
proveFunkci(vynasob); // Výstup: Vysledek: 50
return 0;
}
V tomto příkladu jsme deklarovali funkci proveFunkci
, která přijímá ukazatel na funkci jako argument. Poté jsme deklarovali funkci vynasob
, která bude předána jako argument do funkce proveFunkci
. Při volání proveFunkci(vynasob)
jsme provedli násobení dvou čísel pomocí funkce vynasob
přes ukazatel na funkci.
Ukazatele na funkce jsou mocným nástrojem v jazyce C, který umožňuje dynamicky manipulovat s funkcemi a provádět různé operace s nimi.