Chiama una funzione che 'tu' definisci ed il vantaggio è che la funzione chiamante non la devi modificare di volta in volta...
Immagina di voler scrivere una gestione timer, dove ogni tot nanosecondi si vuole chiamare una funzione.
SetTimerCallBack(ShowTime,&myvars,1000000);
SetTimerCallBack(ClientRefresh,&myvars,10000);
ShowTime è la nostra funzione che verrà chiamata ogni secondo
ClientRefresh è un'altra funzione che verrà chiamata ogni 1/100 secondo
Il gestore chiamerà semplicemente il puntatore a funzione che passiamo.
Un altro classico ANSI esempio è la funzione qsort che usa un puntatore a funzione e che viene così definita:
void qsort(void *array, size_t n_el, size_t size, int (*compare)(const void *, const void *));
array — puntatore inizio array
n_el — numero di elementi
size — grandezza di ciascun elemento in byte
compare — puntatore a funzione - ritorna positivo o negativo
il base al ritorno della nostra 'compare' qsort scambierà o meno gli elementi.