Salve e grazie per l'attenzione. Ho assoluto bisogno di creare un array di puntatori a delle funzioni...nel mio caso devono essere delle funzioni di questo tipo: void funz(int)
ho provato con sintassi di tutti i tipi ma niente. Sapete aiutarmi?
Salve e grazie per l'attenzione. Ho assoluto bisogno di creare un array di puntatori a delle funzioni...nel mio caso devono essere delle funzioni di questo tipo: void funz(int)
ho provato con sintassi di tutti i tipi ma niente. Sapete aiutarmi?
Prova cosi'...
-------------codice:#include <iostream.h> //due funzioni void function1(int z); void function2(int z); main() { void (**p)(int i); p[0] = function1; p[1] = function2; (*p[0])(4); (*p[1])(5); return 0; } void function1(int z) { cout << z << '\n'; } void function2(int z) { cout << z << '\n'; }
La dichiarazione
indica un puntatore a puntatore a funzionecodice:void (**p)(int i);
|1°puntatore| -----> |2°puntatore| -------> Funzione
NOTA: potresti cambiare la dichiarazione di prima con la più statica
dove NUM_FUNC è una costante pari al numero di funzioni da puntare...codice:void (*p[NUM_FUNC])(int i);
Se ho capito bene quello che cerchi, dovrebbe funzionare...
Speriamo!
Fammi sapere.
Ciao!
...c'è chi come te attende l'alba...
Grazie mille! il fato ha voluto che mentre si accendeva il computer capitassi casualmente sulla pagina del mio manuale dove si parlava di queste cose...ma comunque mi serviva un esempio!
Grazie!
No, è sbagliato .... dichiarando quel 'p' hai solamente dichiarato un puntatore a puntatore a funzione. Non hai allocato spazio per i 2 puntatori a funzione!!!! Quel 'p' non è inizializzato quindi ..... sai già cosa potrebbe succedere: un bel segmentation fault!Originariamente inviato da np2k
codice:void (**p)(int i); p[0] = function1; p[1] = function2; (*p[0])(4); (*p[1])(5);
La soluzione migliore (e più pulita) è quella di usare un typedef:
Inoltre lo standard "C" è molto "di maniche larghe" per quanto riguarda la chiamata di una funzione tramite puntatore, quindi puoi fare (*arrFunz[0]) (4); ma anche solo arrFunz[0] (4);.codice:typedef void (*PFN_MIAFUNZ) (int); int main (void) { PFN_MIAFUNZ arrFunz[2]; arrFunz[0] = function1; arrFunz[1] = function2; arrFunz[0] (4); arrFunz[1] (5); .... } ....
Naturalmente, scusate!Bisogna allocare spazio per i due puntatori a funzione!!
Allora la soluzione sia:
Ciao!codice:void (*p[NUM_FUNC])(int i);
...c'è chi come te attende l'alba...