Studijní materiály
EXTRA Kontakt

Ukazatele na funkce v jazyce C

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í.

Deklarace a použití ukazatele na funkce

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.

Příklad deklarace a použití ukazatele na funkci:

#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.

Předání funkcí jako argumentů do jiných funkcí

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.

Příklad předání funkce jako argumentu:

#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.