Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: BlackZeroX en 14 Enero 2011, 02:12 am



Título: [Duda] Punteros a Funciones.
Publicado por: BlackZeroX en 14 Enero 2011, 02:12 am
.
¿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!¡.


Título: Re: [Duda] Punteros a Funciones.
Publicado por: leogtz en 14 Enero 2011, 02:37 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:

Código
  1. #include <stdio.h>
  2. void escribir(signed int);
  3. int main(void)
  4. {
  5.    void (*puntero)(int);   /* puntero es un puntero a una funcion */
  6.    puntero = escribir;     /* puntero = direccion del comienzo de la funcion */
  7.    (*puntero)(20);
  8.    return 0;
  9. }
  10. void escribir(signed int numero)
  11. {
  12.    if(numero > 1)
  13.    escribir(numero - 1);
  14.    printf("%d\n", numero);
  15. }
  16.  

Utilizamos el tipo de dato void.


Título: Re: [Duda] Punteros a Funciones.
Publicado por: BlackZeroX en 14 Enero 2011, 07:44 am
.
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.

Código
  1.  
  2. #include<stdio.h>
  3. #include<stdlib.h>
  4.  
  5. char* strcpy(char* str_dest,char* str_src)
  6. /**
  7.     Copia [*str_src] a [*str_dest].
  8.     Retorna el puntero a [str_dest]
  9. **/
  10. {
  11.    char *copyreturn = str_dest;
  12.    while(*(str_dest++)=*(str_src++));
  13.    return copyreturn;
  14. }
  15. char* clone_string(char *msg,unsigned int lenmsg, char *(*Pcopy)(char*,char*))
  16. /*
  17.     Clonea una longitud de *msg y retorna el puntero hacia la misma.
  18.     *msg Cadena entrante a copiarse.
  19.     lenmsg Longitud de *msg.
  20.     *Pcopy Puntero a el proceso que copiara a msg a un nuevo buffer.
  21. */
  22. {
  23.    char *cadena = (char*)malloc(sizeof(char)*(++lenmsg));
  24.    return Pcopy(cadena,msg);
  25. }
  26. int main() {
  27.    char *(*pf1)(char*,unsigned int,char*(*)(char*,char*)) = clone_string;
  28.    char *res = pf1((char*)"Hola Mundo",10,strcpy);
  29.    printf ("%s",res);
  30.    free(res);
  31.    getchar();
  32.    return 0;
  33. }
  34.  
  35.  

Temibles Lunas!¡.
.