Punteros a funciones en C (C++)

Aquí dejo algunas anotaciones sobre esta particularidad tan poco utilizada en C. Muchos de estos ejemplos se encuentran a millones por internet, aunque el de la función que devuelve un puntero a función no lo encontré por ningún lado, razón por la cual lo publico aquí.

Supongo que alguien podría servirle en el futuro...

Un saludo.
  1. // Puntero a función
  2. void (*var1)();
  3. /* var1 es un puntero a una función sin parámetros y que
  4. no devuelve nada */
  5.  
  6. // Puntero a función que devuelve algo
  7. int (*var2)();
  8. /* var2 es un puntero a una función sin parámetros y que
  9. devuelve un int */
  10.  
  11. // Puntero a función que devuelve un puntero
  12. int *(*var3)();
  13. /* var3 es un puntero a una función sin parámetros y que
  14. devuelve un puntero a int */
  15.  
  16. // Puntero a función con parámetros
  17. int *(*var4)(int*, int);
  18. /* var4 es un puntero a una función que recibe como
  19. parámetros un puntero a int y un int, y que a su vez
  20. devuelve un puntero a int */
  21.  
  22. // Array de punteros a funciones
  23. int (*var5[])(int, int)
  24. /* var5 es un array de funciones que reciben como parámetros
  25. dos int y devuelven otro */
  26.  
  27. // Puntero de puntero a función
  28. int (**var6)(int, int)
  29. /* var6 es un puntero que apunta a un puntero a una función
  30. que recibe dos int como parámetros y devuelve otro
  31. (equivalente al ejemplo anterior) */
  32.  
  33. // Un puntero a función como parámetro (man qsort)
  34. void qsort(void *base, size_t nmemb, size_t size,
  35. int(*compar)(const void *, const void *));
  36. /* qsort es el prototipo de una función cuyo cuarto
  37. parámetro (llamado compar) es un puntero a una función
  38. que recibe dos punteros sin tipo y que devuelve un int */
  39.  
  40. // Función que devuelve un puntero a función
  41. int ( *getFuncion1() )(int, int);
  42. /* getFuncion1 es el prototipo de una función que no recibe
  43. parámetros y que devuelve un puntero a una función que
  44. recibe dos int como parámetros y devuelve otro */
  45.  
  46. // Otra función que devuelve un puntero a función
  47. void ( *getFuncion2(int num) )();
  48. /* getFuncion2 es el prototipo de una función que recibe un
  49. int como parámetro y devuelve un puntero a una función
  50. que no recibe parámetros ni devuelve nada */

1 comentarios:

Sbiky dijo...

Kudo para ti! me lo guardo!