Definición del puntero de función
Puntero de función:
Un puntero de función es una variable puntero que apunta a una función. Por lo tanto, el "puntero de función" en sí debería ser primero una variable de puntero, pero la variable de puntero apunta a una función. Esto es como usar variables de puntero para señalar variables enteras, tipos de caracteres y matrices. Aquí, apuntan a funciones. Como se mencionó anteriormente, cuando se compila C, cada función tiene una dirección de entrada, y la dirección de entrada es la dirección a la que apunta el puntero de función. Una vez que tenga una variable de puntero que apunte a una función, puede usar la variable de puntero para llamar a la función, del mismo modo que puede usar una variable de puntero para hacer referencia a otros tipos de variables. Estos conceptos son generalmente consistentes. Los punteros de función tienen dos usos: llamar a funciones y servir como parámetros de función.
El método de declaración del puntero de función es:
Tipo de valor de retorno (* nombre de variable de puntero) ([lista de parámetros formales]);
Nota 1: " El "tipo de valor" de retorno indica el tipo de retorno de la función. Los corchetes en "(nombre de la variable de puntero)" no se pueden omitir. Los corchetes cambian la prioridad del operador. Si se omite toda la función, se convierte en una descripción de la función, lo que indica una función cuyo tipo de datos de retorno es un puntero. La siguiente "lista de parámetros formales" representa la lista de parámetros de la función a la que apunta la variable de puntero. Por ejemplo:
int func(int x); /* Declarar una función*/
int (*f) (int x); / p>
f=func; /* Asigne la primera dirección de la función func al puntero f */
O utilice el siguiente método para asignar la dirección de la función al puntero de función: p>
f = amp; func;
Al asignar, la función func no tiene paréntesis ni parámetros Dado que func representa la primera dirección de la función, después de la asignación, el puntero f apunta al código. de la función func(x) la primera dirección.
Nota 2: Los parámetros formales entre paréntesis de función son opcionales, dependiendo de la situación.
El siguiente programa ilustra cómo llamar a una función usando un puntero de función:
Ejemplo 1,
#stdio.hgt; p> int max(int x, int y){return (xgt;y? x:y);}
int main()
{
int ( *ptr)(int, int);
int a, b, c;
ptr = max;
scanf("dd" , amperio; a , amperio; b);
c = (*ptr)(a, b
printf("a=d, b=d, max=d); ", a, b, c);
return 0;
}
ptr es una variable puntero que apunta a una función, por lo que la función max() se puede asignar a ptr como valor ptr, es decir, asignar la dirección de entrada de max () a ptr, y puede usar ptr para llamar a la función en el futuro. De hecho, tanto ptr como max apuntan a la misma dirección de entrada. La diferencia es que ptr es una variable de puntero, a diferencia del nombre de la función, está muerta, puede apuntar a cualquier función, depende de lo que quieras hacer. Cualquiera que sea la dirección de función que se le asigne en el programa, apunta a esa función. Luego se llama con una variable de puntero, por lo que puede apuntar a diferentes funciones, una tras otra. Sin embargo, tenga en cuenta que las variables de puntero que apuntan a funciones no tienen operaciones y--, así que tenga cuidado al usarlas.
Sin embargo, esto no pasa en algunos compiladores. Este ejemplo se complementa de la siguiente manera.
Debería ser así:
1. Defina el tipo de puntero de función:
typedef int (*fun_ptr)(int, int);
2. Declarar variables y asignar valores:
fun_ptr max_func=max;
En otras palabras, la función asignada al puntero de función debe ser coherente con el prototipo de función señalado. a por el puntero de función.
Ejemplo 2,
#includelt; stdio.hgt
void FileFunc()
{
printf("FileFunc\n");
}
void EditFunc()
{
printf("EditFunc\n" );
}
void main()
{
typedef void(*funcp)();
funcp pfun=FileFunc;
pfun();
pfun=EditFunc;
pfun();
} p>