El manejo de direcciones en lugar de valores, permite que el nombre dado a una función geométrica, sea utilizado para reemplazarlo con otras funciones que se requieran, dando lugar a lo que podría llamarse función de reemplazo o función variable. Para emplearlas:
por ejemplo:
int suma(int a, int b);
int resta(int a, int b);
int multiplica(int a, int b);
tipo_de_función(*nombre_funcion1)();
tipo_de_función(*nombre_funcion2)();
por ejemplo: void clasifica(int a, int
b, int(*opera)());
En ese caso *opera es el nombre del apuntador de la función genérica que permitirá reemplazar ese argumento con el nombre de alguna función. Observe que siempre va encerrado entre paréntesis para los argumentos. La declaración int se relaciona con la dirección y por consiguiente siempre es de tipo entero.
main(void)
{
char r;
printf("\n Indica operación + - * ");
r=getche();
switch(r)
{
case '+':
printf("\n Se llama a clasifica con la función argumento suma ");
clasifica(a,b,suma); break;
case '-':
printf("\n Se llama a clasifica con la función argumento resta ");
clasifica(a,b,resta); break;
case '*':
printf("\n Se llama a clasifica con la función argumento multiplica ");
casifica(a,b,multiplica); break;
default:
printf("\n Error "); break;
}
}
{
int y;
y=(*opera(a,b)); /* se apunta a alguna función */
return(y);
}
int sume(int a, int b)
{
return(a+b);
}
int resta(int a, int b)
{
return(a-b);
}
int multiplica(int a, int b)
{
return (a*b);
}
| #include<stdio.h>
#include<conio.h> int suma(int a, int b); int resta(int a, int b); int multiplica(int a, int b); int clasifica(int a, int b, int (*opera)()); { char r; int (*opera)(); int a=1, b=1; printf("\n Indica operación + - * "); r=getche(); switch(r) { case '+': printf("\n %d %c %d = %d",a,r,b,clasifica(a,b,suma)); clasifica(a,b,suma); break; printf("\n Se llama a clasifica con la función argumento resta "); printf("\n %d %c %d = %d",a,r,b,clasifica(a,b,resta)); clasifica(a,b,resta); break; case '*': printf("\n Se llama a clasifica con la función argumento multiplica "); printf("\n %d %c %d = %d",a,r,b,clasifica(a,b,multiplica)); casifica(a,b,multiplica); break; default: printf("\n Error "); break; } }
int clasifica(int a, int b, int(*opera)()) { int y; y=(*opera(a,b)); /* se apunta a alguna función */ return(y); } int sume(int a, int b) { return(a+b); } int resta(int a, int b) { return(a-b); } int multiplica(int a, int b) { return (a*b); |
