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.