EsattoOriginariamente inviato da donato.sciarra
int *funzione (int a, int b[]);
scrivo il prototipo di una funzione che restituisce un puntatore ad un intero !
Hai appena dichiarato una variabile di tipo puntatore a funzione. A questa variabile puoi assegnare l'indirizzo di una funzione di tipo compatibile con quanto dichiarato.Originariamente inviato da donato.sciarra
mentre se scrivo
int (*funzione) (int a, int b[]);
è una inizializzazione di un puntatore ad una funzione che riceve due parametri (un intero ed un vettore di interi) e restituisce un intero .... giusto?
Allora forse è meglio se faccio un esempio più completo. I puntatori a funzione sono tipicamente usati per gestire quelle che vengono chiamate "callback". In pratica si passa ad una certa funzione A un parametro che è un puntatore a funzione B. La funzione A, quando ne ha bisogno, chiama la funzione B tramite il puntatore passato.Originariamente inviato da donato.sciarra
ma il riferimento del puntatore dove va risolto, o avviene automaticamente nella dicitura
int (*funzione) ...... ?
Un altra domanda:
ma c sono sempi pratici di utilizzo di cose del genere?
Sui libri che ho, riporta semplicemente esempi di menù !
Ma se propio devo fare un menù lo faccio con uno switch in un do while mi sembra più comodo? o no?
Normalmente è molto comodo definire con typedef un nuovo "tipo" che rappresenta il puntatore a funzione.
Ecco un semplice esempio:
a) Ho creato un nuovo tipo PFNSTAMPA (PFN sta tipicamente per Pointer to function) che è un puntatore alla funzione.codice:#include <stdio.h> typedef void (*PFNSTAMPA) (int); void stampa_numeri (PFNSTAMPA callback) { int i; for (i = 0; i < 5; i++) callback (i); } void mia_stampa1 (int num) { printf ("%d\n", num); } void mia_stampa2 (int num) { printf ("Numero: %d\n", num); } int main (void) { stampa_numeri (mia_stampa1); stampa_numeri (mia_stampa2); return 0; }
b) La funzione stampa_numeri genera una sequenza di numeri ma non li stampa, si aspetta come parametro un puntatore alla funzione dichiarata. Che richiama nel ciclo for.
c) mia_stampa1 e mia_stampa2 sono compatibili con PFNSTAMPA. Nel main chiamo stampa_numeri passando prima una e poi l'altra funzione.
Il risultato è che stampa_numeri si appoggia al "comportamento" della funzione passata come argomento.
Spero che il tutto sia chiaro.

Rispondi quotando