Estas entregas son breves pero consisas y van a lo que es nesesario.
Antes de veniar aquí expuse una duca en elhacker.net para ver si mi conjetura era cierta.
Código: Seleccionar todo
http://foro.elhacker.net/programacion_cc/duda_punteros_a_funciones-t316718.0.html
Un puntero a una funcion es ideal si no se quiere llamar de forma indirectamente a una función y esto a mi forma de pensar es genial si se crean plugins o se quiere programar en base a eventos ( voy a crear una clase apra plugins en C mas adelante )
Como se usan?
[congetura]
* Creo y supongo que se declara con el tipo que devuelve la funcion, similar a la declaracion de un prototipo pero difiriendo de esta.
[/congetura]
Pues mi congetura fue cierta se declaran igual que los prototipos solo que difieren de los mismo, es decir:
* Se declaran como prototipos PERO sin nombres de variables.
Un ejemplo basico:
Código: Seleccionar todo
#include<stdio.h>
#include<stdlib.h>
char* strcpy(char* str_dest,char* str_src)
/**
Copia [*str_src] a [*str_dest].
Retorna el puntero a [str_dest]
**/
{
char *copyreturn = str_dest;
while(*(str_dest++)=*(str_src++));
return copyreturn;
}
char* clone_string(char *msg,unsigned int lenmsg, char *(*Pcopy)(char*,char*))
/*
Clonea una longitud de *msg y retorna el puntero hacia la misma.
*msg Cadena entrante a copiarse.
lenmsg Longitud de *msg.
*Pcopy Puntero a el proceso que copiara a msg a un nuevo buffer.
*/
{
char *cadena = (char*)malloc(sizeof(char)*(++lenmsg));
return Pcopy(cadena,msg);
}
int main() {
char *(*pf1)(char*,unsigned int,char*(*)(char*,char*)) = clone_string;
char *res = pf1((char*)"Hola Mundo",10,strcpy);
printf ("%s",res);
free(res);
getchar();
return 0;
}
Temibles Lunas!¡.
.