Hai perfettamente ragione, in questo caso l'uso dei puntatori a funzione è assolutamente inutile; normalmente vengono usati in altri casi, ad esempio:
- come callback; immagina ad esempio una libreria per effettuare connessioni HTTP; se vuoi gestire download grossi o in generale processare i dati man mano che arrivano un approccio comune è di fornire un callback, ovvero una funzione che viene richiamata di tanto in tanto passandole i dati che sono arrivati finora. Per specificare la funzione in questione si usano i puntatori a funzione;
- un altro caso diffuso come callback è per toolkit grafici - ad ogni evento (click del mouse, mouse mosso, ...) può essere associata una funzione custom da richiamare; anche questo si può fare tramite puntatori a funzione (anche se in C++ spesso si sfrutta piuttosto l'ereditarietà e i metodi virtuali - che però alla fine sono puntatori sotto mentite spoglie);
- per algoritmi generici, in cui una parte dell'algoritmo dev'essere fornita dall'esterno; un esempio classico è il sort, in cui il criterio di ordinamento non è fissato, ma può essere fornito dall'utilizzatore dell'algoritmo; è il caso della funzione di libreria C qsort, come pure di uno degli overload di std::sort (dove però viene accettato un generico functore, non è limitata all'uso di puntatori a funzione).