logo

Punter de funció en C++

Requisits previs:

Els punters són representacions simbòliques d'adreces. Permeten que els programes simulin la trucada per referència, així com per crear i manipular estructures de dades dinàmiques. Iterar sobre elements en matrius o altres estructures de dades és un dels principals ús dels punters.

L'adreça de la variable amb la qual esteu treballant s'assigna a la variable punter que apunta al mateix tipus de dades (com ara un int o una cadena).



Sintaxi :

datatype *var_name;>

Adreça de la funció: Tots sabem que el codi de cada funció resideix a la memòria, de manera que cada funció té una adreça com totes les altres variables del programa. El nom d'una funció es pot utilitzar per trobar l'adreça de la funció. Podem obtenir l'adreça d'una funció només escrivint el nom de la funció sense parèntesis a la funció.

Per saber més sobre això, consulteu l'article – adreça de la funció .

Punter de funció en C++

  • El punter de funció s'utilitza per apuntar funcions, de la mateixa manera, els punters s'utilitzen per apuntar variables.
  • S'utilitza per guardar l'adreça d'una funció.
  • El punter de funció s'utilitza per cridar la funció o es pot enviar com a argument a una altra funció.
Punter de funció en C++

Punter de funció en C++

Sintaxi :

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

Referència i desreferenciació del punter de funció en C++

De manera similar al punter que s'utilitza amb variables, fem referència i desreferenciació amb un punter de funció.

Referència: Quan el punter s'assigna l'adreça de la funció que s'hi ha d'associar, aquest procés es coneix com a referència.

Desreferenciació: Quan utilitzem l'operador (*) per obtenir el valor emmagatzemat al punter.

Sintaxi:

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

Punter de funció utilitzat per cridar la funció

En això, veiem com apuntem un punter a una funció i la cridem utilitzant aquest punter. És una manera eficient d'utilitzar

Exemple:

C++


làtex de mida de text



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

>

>

Sortida

The value of the product is: 30>

En el programa anterior, estem declarant una funció multiplicar on estem multiplicant dos elements a i b, i després retornant el resultat. Però, en lloc de cridar directament la funció, estem utilitzant un punter de funció prod que fa el mateix treball per a nosaltres.

Passant un punter de funció com a paràmetre

Quan es declara un punter de funció per emmagatzemar l'adreça de memòria de la funció, però, quan volem passar el valor de retorn a la següent funció. Tenim dos mètodes per realitzar aquesta tasca. Primer, passa el valor que hem obtingut o, en segon lloc, passa el punter de funció que ja existeix.

Exemple:

C++


seleni



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

>

>

Sortida

The value of the product is: 30>

Complexitat temporal: O(1).
Espai auxiliar: O(1).

En el programa anterior, estem declarant una funció de multiplicació en la qual multipliquem 2 variables a i b. Estem passant el punter de funció com a paràmetre a la funció d'impressió, aquí fem servir el punter de funció per calcular el valor de la funció de multiplicació i després aquest valor a la funció d'impressió.