PDA

Visualizza la versione completa : [C] Array di puntatori a funzione


ramy89
16-01-2011, 23:20
Salve a tutti,vorrei sapere come fare per allocare memoria per un array di puntatori a funzione.
In particolare non so qual'è la dimensione che deve avere una funzione.
Il puntatore è destinato a contenere nomi di funzioni che restituiscono variabili di tipo float.
Nella dichiarazione dovrei scrivere:


pointer[0] ()=(dim)malloc(dim);

Ma non ho idea di cosa scriverci,qual'è la dimensione di una funzione? :)
Ho provato a usare sizeof ma mi da errore di sintassi.

KrOW
17-01-2011, 00:35
Ciao ... Sinceramente non capisco il perché del tuo codice e nemmeno cosa intendiquando parli della "dimensione della funzione" ... Comunque un puntatore a funzione non puo essere utilizzato per creare una nuova funzione (come i puntatori con gli array), ma soltanto per memorizzare indirizzi di funzioni "preesistenti" e per richiamare una funzione attraverso lo stesso puntatore a funzione ...

float sum( float a, float b )
{
return a + b;
}

float diff( float a, float b )
{
return a - b;
}

int round( float a )
{
return (int)a;
}
....
float (*Func)(floar,float) = sum;
Func(1.0f, 2.0f);
Func = diff;
Func(2.0f, 1.0f);
Func = round; //Errore
....
Nota anche che la firma del puntatore deve essere identica a quella della funzione a cui deve puntare ...

ramy89
17-01-2011, 01:28
Io voglio dichiarare un array di puntatori a funzione,so come usarli.
Dichiaro il puntatore a funzione così:


int (*pointer) ();

Giusto per fare un esempio.
Adesso vorrei un array di puntatori,sto provando ma mi da segmentation fault,provo così:


int (**pointer)();

O così:


int *(*pointer) ();

Ma niente da fare :dhò: voglio un array di puntatori a funzione.

lolide
17-01-2011, 01:47
devi dichiarare un tipo puntatore a funzione con typedef (che anche se non volessi fare un'array, è sempre consigliato in tutti i libri di C)



void funzione();

typedef void (*punt_a_funzione)();

punt_a_funzione arr_punt_a_funzione[10];

punt_a_funzione* arr_dinamico_punt_a_funzione = (punt_a_funzione*) malloc(10 * sizeof(punt_a_funzione));

.....

{
arr_punt_a_funzione[2] = funzione;
arr_dinamico_punt_a_funzione[3] = funzione;

arr_punt_a_funzione[2]();
arr_dinamico_punt_a_funzione[3]();
}

ramy89
17-01-2011, 02:23
Fantastico :D
Dichiarando il tipo riesco ad allocare perfettamente.
Grazie :ciauz:

Loading