Descripción de como usar los punteros a funciones en el lenguaje de programación C.
El guión de esta presentación se encuentra en:
http://www.slideshare.net/AnesGy/script-de-punteros-a-funciones
2. Estructura de la Memoria
Sistema Operativo
Memoria Global Código del Programa 1
Memoria Global
Pila (Stack)
Pila (Stack) Código del Programa 2
Memoria Global
Pila (Stack)
Montículo (Heap) Memoria libre del
sistema
(Montículo o Heap)
3. Estructura de la Memoria
Código Máquina
Código del
Programa :main
instrucciones
3F5000AC
3F5000AD
... 3F5000AE
:bolzano 3F5000C8
Memoria Global instrucciones 3F5000C9
... 3F5000CA
:mifunción 3F50019E
instrucciones 3F50019F
Pila ... 3F5001A0
5. Declaración de un tipo
typedef tipo (*miTipo) (tipo, …)
miTipo variable;
Ejemplo:
typedef double (*miFunc) (double);
miFunc func;
func = sin;
printf("%f", (*func) (1.56)) ;
6. Utilidad de los Punteros a Funciones
• Creación de procedimientos que requieren una función como
Parámetro:
– Creación de procedimientos más versátiles o genéricos (por ejemplo, la
versión del programa Bolzano que sigue).
– Funciones personalizables (por ejemplo, una función que ordene elementos
de una matriz según un criterio dado por una función de tu elección).
– Interfaces Gráficas de Usuario (GUI).
• Llamado de funciones de forma secuencial
Esto implica tener una matriz de punteros a función.
double (*fptrs[])(double, … ) = { … }; //Con una declaración de variable
miTipo fptrs[] = { … }; //Con una declaración de tipo
(*fptrs[1])(parámetros); //Se llaman así.
7. Función de ejemplo Bolzano
Esta función usa un puntero a función
para poder buscar ceros en cualquier
función que devuelva double y requiera
un double como parámetro.
8. Bolzano No
i < 100 return med
f, min, max
f(min) Si med = (max –
== 0 return min min) / 2 + min
f(max) Si f(med) Si
== 0 return max == 0 return med
f(max)* No return f(med)* No
f(min ) f(max ) max = med
<0 NAN <0
i=0 min = med
i ++