logo

Funkčný ukazovateľ v C++

Predpoklady:

Ukazovatele sú symbolické reprezentácie adries. Umožňujú programom simulovať volanie po referencii, ako aj vytvárať a manipulovať s dynamickými dátovými štruktúrami. Iterácia prvkov v poliach alebo iných dátových štruktúrach je jedným z hlavných použití ukazovateľov.

Adresa premennej, s ktorou pracujete, je priradená k premennej ukazovateľa, ktorá ukazuje na rovnaký typ údajov (napríklad int alebo reťazec).



Syntax :

sql dátové typy
datatype *var_name;>

Adresa funkcie: Všetci vieme, že kód každej funkcie sa nachádza v pamäti, takže každá funkcia má adresu ako všetky ostatné premenné v programe. Názov funkcie možno použiť na nájdenie adresy funkcie. Adresu funkcie môžeme získať jednoduchým napísaním názvu funkcie bez zátvoriek do funkcie.

Viac sa o tom dozviete v článku – adresa funkcie .

Funkčný ukazovateľ v C++

  • Ukazovateľ funkcie sa používa na ukazovanie funkcií, podobne ukazovatele sa používajú na ukazovanie premenných.
  • Používa sa na uloženie adresy funkcie.
  • Ukazovateľ funkcie sa používa buď na volanie funkcie, alebo sa môže poslať ako argument inej funkcii.
Funkčný ukazovateľ v C++

Funkčný ukazovateľ v C++

Syntax :

return_type (*FuncPtr) (parameter type, ....);>

Odkazovanie a dereferencovanie funkčného ukazovateľa v C++

Podobne ako pri ukazovateli používanom pri premenných vykonávame odkazovanie a dereferencovanie pomocou ukazovateľa funkcie.

Odkazovanie: Keď je ukazovateľu pridelená adresa funkcie, ktorá s ním má byť spojená, potom sa tento proces označuje ako odkazovanie.

Dereferencovanie: Keď použijeme operátor (*) na získanie hodnoty uloženej v ukazovateli.

Syntax:

// Declaring return_type (*FuncPtr) (parameter type, ....); // Referencing FuncPtr= function_name; // Dereferencing data_type x=*FuncPtr;>

Ukazovateľ funkcie používaný na volanie funkcie

V tomto vidíme, ako ukazujeme ukazovateľ na funkciu a voláme ju pomocou tohto ukazovateľa. Je to efektívny spôsob použitia

Príklad:

dĺžka poľa java

C++




// C++ program to implementation> // Function Pointer> #include> using> namespace> std;> int> multiply(>int> a,>int> b) {>return> a * b; }> int> main()> {> >int> (*func)(>int>,>int>);> >// func is pointing to the multiplyTwoValues function> >func = multiply;> >int> prod = func(15, 2);> >cout <<>'The value of the product is: '> << prod << endl;> >return> 0;> }>

>

>

Výkon

The value of the product is: 30>

Vo vyššie uvedenom programe deklarujeme funkciu násobiť, kde násobíme dva prvky a a b, a potom vraciame výsledok. Ale namiesto priameho volania funkcie používame ukazovateľ funkcie prod, ktorý za nás robí rovnakú prácu.

Odovzdanie ukazovateľa funkcie ako parametra

Pri deklarovaní funkcie ukazovateľ na uloženie adresy pamäte funkcie, ale keď chceme odovzdať návratovú hodnotu ďalšej funkcii. Na vykonanie tejto úlohy máme dva spôsoby. Najprv buď odovzdajte hodnotu, ktorú sme dostali, alebo po druhé odovzdajte ukazovateľ funkcie, ktorý už existuje.

Príklad:

C++




// C++ Program for demonstrating> // function pointer as pointer> #include> using> namespace> std;> const> int> a = 15;> const> int> b = 2;> // Function for Multiplication> int> multiply() {>return> a * b; }> // Function containing function pointer> // as parameter> void> print(>int> (*funcptr)())> {> >cout <<>'The value of the product is: '> << funcptr()> ><< endl;> }> // Driver Function> int> main()> {> >print(multiply);> >return> 0;> }>

>

>

prepísanie metódy v jazyku Java
Výkon

The value of the product is: 30>

Časová zložitosť: O(1).
Pomocný priestor: O(1).

Vo vyššie uvedenom programe deklarujeme funkciu násobenia, v ktorej násobíme 2 premenné a a b. Ukazovateľ funkcie odovzdávame ako parameter vo funkcii print, tu používame ukazovateľ funkcie na výpočet hodnoty z funkcie násobenia a potom túto hodnotu vo funkcii print.