Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    95

    [c++] dichiarazione di puntatori diarray di funzioni

    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?

  2. #2
    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
    codice:
    void (**p)(int i);
    indica un puntatore a puntatore a funzione
    |1°puntatore| -----> |2°puntatore| -------> Funzione


    NOTA: potresti cambiare la dichiarazione di prima con la più statica
    codice:
    void (*p[NUM_FUNC])(int i);
    dove NUM_FUNC è una costante pari al numero di funzioni da puntare...

    Se ho capito bene quello che cerchi, dovrebbe funzionare...
    Speriamo!

    Fammi sapere.
    Ciao!
    ...c'è chi come te attende l'alba...

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    95
    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!

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Originariamente inviato da np2k
    codice:
       void (**p)(int i);
       
       p[0] = function1;
       p[1] = function2;
    
       (*p[0])(4);
       (*p[1])(5);
    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!


    La soluzione migliore (e più pulita) è quella di usare un typedef:

    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);
    
        ....
    }
    
    ....
    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);.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  5. #5
    Naturalmente, scusate!Bisogna allocare spazio per i due puntatori a funzione!!

    Allora la soluzione sia:

    codice:
    void (*p[NUM_FUNC])(int i);
    Ciao!
    ...c'è chi come te attende l'alba...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.