¿una llamada a una función con un puntero a función es más rápida que una llamada "normal"?
En el caso de C (habrá que revisar los puntos finos de C++) no hay diferencia ya que una llamada a función requiere de un puntero, cuando se llama a una función utilizando su identificador o una expresión que la denote (identifique, haga referencia) ello genera el puntero necesario.
Un ejemplo sencillo:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int (*p
)(const char *) = puts;
p("puntero");
puts("identificador ==> puntero"); (*p)("expresion ==> puntero");
return EXIT_SUCCESS;
}
----
el segundo habría que hacer un while y comparar hasta que la entrada sea correcta.
En ambos. Pero como se trata de ejemplos ilustrativos no veo porque molestarse con validaciones (la idea es explicar otra parte del lenguaje, ya se agregaran cuando sean necesarias).
Un saludo