Uso del puntero de función en C

¿Cuál es la ventaja de pasar una función como argumento a otra función cuando podemos usar la función simplemente llamando a esa función?

Es una forma de simular el polymorphism y / o devoluciones de llamada.

Un progtwig o cliente puede beneficiarse de los puntos de entrada de clientes en algunos contextos. Esta es una forma común de lograr eso. Se puede utilizar para mejorar la modularidad o mejorar la separación física de múltiples implementaciones.

Usando punteros de función puede crear un comportamiento dynamic de envío . El “tipo” dynamic, y no el “tipo” estático “determinará” qué función se invocará.

Este concepto es muy importante en los idiomas OOP y se puede crear utilizando punteros de función.

Porque cuando se escribe la función que toma el puntero de la función, no se sabe necesariamente a qué función debe llamar (espero que tenga sentido) Además, se puede pedir a la función que use diferentes punteros de función para hacer cosas diferentes.

por ejemplo, la biblioteca C tiene la función qsort() . Se necesita un puntero de función para realizar la comparación de los objetos que se ordenan. Entonces, cuando se escribe qsort() , él (o el progtwigdor que lo escribe) no tiene idea de qué tipo de objetos se le pedirá que ordene. Por lo tanto, se utiliza un puntero de función para proporcionar esa capacidad.

Además, se le puede pedir a qsort() que clasifique int s en una llamada y que struct foo objetos inmediatamente después. Al pasar el puntero a una función, qsort() se escribe de tal manera que no se necesita saber mucho sobre los elementos que se están ordenando. Esa información (el tamaño de los objetos que están siendo ordenados y cómo compararlos) se puede pasar a ella como parámetros.

Como lo señaló anteriormente Justin, se usa para simular Polymorphism y callbacks.

Puede consultar este enlace para obtener detalles sobre los punteros de función y cómo usarlos.

Si no sabe de antemano (en tiempo de comstackción) qué función va a utilizar, entonces es útil que pueda poner una función (puntero a) en una variable.

Es como, ¿cuál es la ventaja de usar una variable int x cuando solo puedes escribir una constante 42 ?