¿Cómo debo usar la matriz de punteros de función en C?
¿Cómo puedo inicializarlos?
c
initialization
function-pointers
El chico con el sombrero
fuente
fuente
(*p[4]) (int, int) {sum,substract,mul,div}
Las respuestas anteriores pueden ayudarlo, pero es posible que también desee saber cómo utilizar la matriz de punteros de función.
Solo puede asignar las direcciones de funciones con el mismo tipo de retorno y los mismos tipos de argumentos y ninguno de los argumentos a una única matriz de puntero de función.
También puede pasar argumentos como a continuación si todas las funciones anteriores tienen el mismo número de argumentos del mismo tipo.
Nota: aquí en la matriz, la numeración de los punteros de función comenzará desde 0 igual que en las matrices generales. Entonces, en el ejemplo anterior,
fun1
se puede llamar if option = 0,fun2
se puede llamar if option = 1 yfun3
se puede llamar if option = 2.fuente
(*func_ptr[3])
a(*func_ptr[3])()
y se compilaráAsí es como puedes usarlo:
New_Fun.h
New_Fun.c
C Principal
Espero que esto ayude a entender
Function Pointer.
fuente
f1, f2 ...
y, en lugar de, ingrese 'writefile, readfromfile ...' ... se vuelve más legibleEsta "respuesta" es más una adición a la respuesta de VonC; simplemente señalando que la sintaxis se puede simplificar a través de un typedef, y se puede usar la inicialización agregada:
fuente
Oh, hay toneladas de ejemplos. Solo eche un vistazo a cualquier cosa dentro de glib o gtk. Puede ver el trabajo de los punteros de función en el trabajo allí todo el camino.
Aquí, por ejemplo, la inicialización del material gtk_button.
Y en gtkobject.h encontrarás las siguientes declaraciones:
El material (* set_arg) es un puntero para funcionar y, por ejemplo, se le puede asignar otra implementación en alguna clase derivada.
A menudo ves algo como esto
Para que pueda acceder a la tabla por su nombre y llamar a la función "asociada".
O tal vez usa una tabla hash en la que pone la función y la llama "por su nombre".
Saludos
Friedrich
fuente
Puede usarlo de esta manera:
fuente
Este debería ser un ejemplo breve y simple de copiar y pegar código de las respuestas anteriores. Espero que esto ayude.
fuente
La solución más simple es dar la dirección del vector final que desea y modificarlo dentro de la función.
fuente
Esta pregunta ya ha sido respondida con muy buenos ejemplos. El único ejemplo que puede faltar es uno en el que las funciones devuelven punteros. Escribí otro ejemplo con esto, y agregué muchos comentarios, en caso de que alguien lo encuentre útil:
fuente
Este ejemplo simple para una matriz multidimensional con punteros de función ":
fuente