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);.