- 0 Discussione
-
Puntatori a funzione
Indice |
Introduzione
Modifica
Nei capitoli precedenti abbiamo fatto conoscenza con i puntatori, in quel caso puntavano a delle semplici variabili o all'inizio di un array, però i puntatori possono puntare anche a delle funzioni scritte da noi.
Il primo puntatore a funzione
Modifica
Un puntatore a funzione si dichiara come una funzione normale, ma al posto del nome della funzione ci va la parola chiave function:
void function() MyFunctionPointer;
NOTA BENE
Le funzioni devono SEMPRE essere globali o statiche.
import std.stdio; /*Creiamo il nostro puntatore a funzione*/ void function() FuncPtr; /*Una funzione che verrà chiamata col puntatore a funzione*/ void SayHello() { writefln("Sono una funzione chiamata col puntatore"); } int main(string[] args) //Entry point del programma { //Facciamo puntare il puntatore a funzione all'indirizzo di SayHello FuncPtr = &SayHello; //Chiamiamo la funzione che sta puntando FuncPtr(); return 0; }
Output: Sono una funzione chiamata col puntatore
Puntatori a funzione con parametri
Modifica
I puntatori a funzione possono prendere pure parametri, come nelle funzioni, i parametri saranno separati da una virgola, quindi praticamente sarebbe:
void function(type1 param1, type2 param2, type3 param3....) FuncPtr;
Ecco l'esempio precedente rivisto con i parametri:
import std.stdio; /*Creiamo il nostro puntatore a funzione*/ void function(int a, int b) FuncPtr; /*Una funzione che verrà chiamata col puntatore a funzione*/ void Sum(int a, int b) { writefln("La somma e' : %d", a1 + a2); } int main(string[] args) //Entry point del programma { //Facciamo puntare il puntatore a funzione all'indirizzo di SayHello FuncPtr = ∑ //Chiamiamo la funzione che sta puntando FuncPtr(60, 40); return 0; }
Output: La somma e': 100
Puntatori a funzione che restituiscono in valore
Modifica
Com'era prevedibile, i puntatori a funzione possono restituire valori, proprio come le funzioni, quindi:
tipoRestituito function(parametri...) FuncPtr;
Per semplicità ci riferiamo sempre all'esempio di questo capitolo, quindi lo modifichiamo in modo tale che al posto di stampare il valore della somma, ce lo restituisca:
import std.stdio; /*Creiamo il nostro puntatore a funzione*/ int function(int a, int b) FuncPtr; /*Una funzione che verrà chiamata col puntatore a funzione*/ void Sum(int a, int b) { return a + b; } int main(string[] args) //Entry point del programma { //Facciamo puntare il puntatore a funzione all'indirizzo di SayHello FuncPtr = ∑ //Chiamiamo la funzione che sta puntando int res = FuncPtr(60, 40); //Stampiamo il risultato writefln("Il totale e': %d", res); return 0; }
Output: Il totale e': 100