logo

Funktionspekare i C++

Förutsättningar:

Pekare är symboliska representationer av adresser. De gör det möjligt för program att simulera call-by-referens samt att skapa och manipulera dynamiska datastrukturer. Att iterera över element i arrayer eller andra datastrukturer är en av de huvudsakliga användningarna av pekare.



Adressen till variabeln du arbetar med tilldelas pekarvariabeln som pekar på samma datatyp (som en int eller sträng).

Syntax :

datatype *var_name;>

Funktionens adress: Vi vet alla att varje funktions kod finns i minnet, så varje funktion har en adress som alla andra variabler i programmet. Namnet på en funktion kan användas för att hitta adressen till funktionen. Vi kan få adressen till en funktion genom att bara skriva funktionens namn utan parentes i funktionen.



För att veta mer om detta, se artikeln – adress till funktionen .

Funktionspekare i C++

  • Funktionspekaren används för att peka funktioner, på samma sätt används pekarna för att peka variabler.
  • Den används för att spara en funktions adress.
  • Funktionspekaren används antingen för att anropa funktionen eller så kan den skickas som ett argument till en annan funktion.
Funktionspekare i C++

Funktionspekare i C++

Syntax :



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

Referering och avreferensering av funktionspekaren i C++

I likhet med pekaren som används med variabler utför vi referenser och avreferenser med en funktionspekare.

Refererar till: När pekaren tilldelas adressen till den funktion som ska associeras med den, hänvisas denna process till som referens.

Avlägsnande: När vi använder (*)-operatorn för att få värdet lagrat i pekaren.

Syntax:

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

Funktionspekare som används för att anropa funktionen

I detta ser vi hur vi pekar en pekare till en funktion och kallar den med hjälp av den pekaren. Det är ett effektivt sätt att använda

Exempel:

C++




datumformat.format
// 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;> }>

>

>

Produktion

The value of the product is: 30>

I programmet ovan deklarerar vi en funktion multiplicera där vi multiplicerar två element a och b, och returnerar sedan resultatet. Men istället för att direkt anropa funktionen använder vi en funktionspekare som gör samma arbete för oss.

Att skicka en funktionspekare som en parameter

När vi deklarerar en funktionspekare för att lagra minnesadressen för funktionen men när vi vill skicka returvärdet till nästa funktion. Vi har två metoder för att utföra denna uppgift. Först skicka antingen värdet vi fick eller skicka sedan funktionspekaren som redan finns.

Exempel:

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

>

>

Produktion

The value of the product is: 30>

Tidskomplexitet: O(1).
Extra utrymme: O(1).

I programmet ovan deklarerar vi en multipliceringsfunktion där vi multiplicerar 2 variabler a och b. Vi skickar funktionspekaren som en parameter i utskriftsfunktionen, här använder vi funktionspekaren för att beräkna värdet från multipliceringsfunktionen och sedan det värdet i utskriftsfunktionen.