Dev - C++ - Puntero a una funcion

 
Vista:

Puntero a una funcion

Publicado por Rodrigo (1 intervención) el 22/10/2019 23:04:28
Estimados, estoy haciendo un curso de programacion de videojuegos y me encuentro con que presentan una funcion como la que escribire a continuacion :

char *MakeHiddenPhrase (const char *SecretPhrase, int lenght)



Entiendo el uso de punteros (lo basico) lo que no entiendo es por que la necesidad de tener un puntero a una funcion y quisiera saber si alguien podria mostrarme un ejemplo simple de su uso junto con una explicacion teorica. He buscado videos en youtube e info en internet pero no encuentro a nadie que use algo asi......
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alfil
Val: 4.344
Oro
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Puntero a una funcion

Publicado por Alfil (1444 intervenciones) el 22/10/2019 23:33:46
MakeHiddenPhrase es una función que tiene como parámetros un puntero constante de tipo char y una variable de tipo int; y que devuelve un puntero de tipo char.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 338
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Puntero a una funcion

Publicado por Martín (158 intervenciones) el 23/10/2019 06:13:05
Un puntero a función es un puntero que en lugar de apuntar a una variable apunta a una función.

Bueno, no avancé mucho, pero ¿para qué sirven?

Puede pasarse a una función, por ejemplo, junto con otros argumentos, para que esa función invoque a la función a la que apunte.

Por ejemplo, en C está la función "qsort" :

1
2
void qsort( void *ptr, size_t count, size_t size,
            int (*comp)(const void *, const void *) );;
qsort ordena el array ptr de longitud size usando la función a la que apunte comp.

Como ves, qsort va a usar la función de comparación que se le pase por parámetro, pero como no se puede pasar una función directamente, se pasa un puntero a función.

En tu ejemplo, el puntero a función se pude declarar:

1
char* (*pf)(const char*, int);

Luego se podría asignar:
1
pf = MakeHiddenPhrase;

pf es el puntero que apunta a una función que devuelve un char* y toma como argumentos un const char* y un int.

Puedes buscar una razón extendida para su uso en "funciones callback". (google)

El C++ tiene otros mecanismos para hacer lo mismo, pero más seguros y evolucionados (como std::function o expresiones lambda), de modo que este es un tema del C mucho más que del C++.

Martín
// profe de C++
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rodrigo
Val: 1.755
Plata
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Puntero a una funcion

Publicado por Rodrigo (539 intervenciones) el 23/10/2019 11:11:15
Esta mal descrito.
Esta firma;

1
char *MakeHiddenPhrase (const char *SecretPhrase, int lenght)

No hay "puntero a funcion". La sintaxis de un "puntero a funcion" es como la explicada previamente, la que no esta siendo usada aqui.

En C no existe el tipo string y tipicamente se maneja como un arreglo unidimensional de chars terminado en un 0 o bien se indica su largo, como parece ser el caso aqui.
Los arreglos se manejan pasando o entregando la direccion de memoria del primer char, es ese el primer parametro de la funcion, y es este tipo de dato que esa funcion deberia entregar.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar