[Duda] Punteros a Funciones.

Iniciado por BlackZeroX, 14 Enero 2011, 02:12 AM

0 Miembros y 2 Visitantes están viendo este tema.

BlackZeroX

.
¿Siempre se debe declarar int a un puntero de una funcion/proceso?, me estoy leyendo un articulo al respecto que es de C++, pero quisiera saber si en ANSI C es lo mismo o si los punteros a funciones ANSI C son de otra forma.

[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]

Dulces Lunas!¡.
The Dark Shadow is my passion.

leogtz

Cita de: BlackZeroX▓▓▒▒░░ en 14 Enero 2011, 02:12 AM

[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]



Así es.

Mira un ejemplo:

#include <stdio.h>
void escribir(signed int);
int main(void)
{
    void (*puntero)(int);   /* puntero es un puntero a una funcion */
    puntero = escribir;     /* puntero = direccion del comienzo de la funcion */
    (*puntero)(20);
    return 0;
}
void escribir(signed int numero)
{
    if(numero > 1)
    escribir(numero - 1);
    printf("%d\n", numero);
}


Utilizamos el tipo de dato void.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

BlackZeroX

#2
.
Gracias por corrovorarmelo, lo que andube leyendo siempre ponian int cuando veia que las funciones era char* o char** o void, se que no esta mal pero se que es una mala practica a largo plazo... y era por esto que deseaba saber realmente esto.

Aquí dejare una de mis practicas.



#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!¡.
.
The Dark Shadow is my passion.