SlideShare ist ein Scribd-Unternehmen logo
1 von 2
Downloaden Sie, um offline zu lesen
EJEMPLO DE PASO DE FUNCIONES COMO PARÁMETROS A OTRA FUNCIÓN

#include <iostream>
#include <conio.h>

char auxa(int posicion);        // prototipo de auxa
void escribe (int posicion, char (* ptr)(int) ); // L.5: prototipo de escribe

int main() {                       // ======================
  char (* fptr) (int);              // M.1: declara fptr puntero-a-función

    fptr = auxa;             // M.2: inicia fptr
    cout<<"La letra ”<<5<<” es una: “<< auxa(5)<<endl;
    escribe (5, fptr);        // M.4: llamada a escribe
    return (0);
}

char auxa (int num) {         // Definición de auxa
  char * str = "Hola mundo";
  return str[num];           // L.16
}

void escribe (int pos, char (* fpointer)(int) ) { // definición de escribe
  char ch ;
  printf ("Estoy recibiendo la letra: %cn", auxa(pos));
  ch = (* fpointer)(6);
  printf ("Estoy inventando la letra: %cn", ch);
}

Salida:

La letra 5 es una: m
Estoy recibiendo la letra: m
Estoy inventando la letra: u
Comentario:


La función auxa recibe un entero y devuelve un carácter. El puntero str a la matriz de
caracteres "Hola mundo" es una variable local de esta función. El lector observador,
percibirá que el carácter devuelto en L.16, se obtiene utilizando una notación de puntero
con subíndice, algo extraño a la luz de la expuesto hasta ahora. En realidad también
podríamos haber puesto:

return *(str+num);   // L.16-bis

Al tratar de las matrices justificaremos la notación de subíndices más compacta. Por el
momento el lector puede aceptar la que le resulte más cómoda. También observar que
en este caso hemos suprimido el paréntesis en el valor devuelto por no ser realmente
necesario.

return (str[num]) == return str[num]

La función escribe recibe dos parámetros: un entero, y un puntero-a-función aceptando
un entero y devolviendo un carácter. Su prototipo está en L.5, y su definición en L.18.
Observe que esta función proporciona dos salidas. La primera de ellas es una invocación
a cout parecida a la realizada en M.3, en la que el segundo argumento es también el
resultado de una invocación directa a auxa.

La segunda se realiza también mediante un cout, pero en este caso, se utiliza
directamente un char como segundo argumento, que es proporcionado por la variable
local ch. El punto interesante aquí es que su valor se ha obtenido mediante una
invocación a auxa a través de un puntero.

El programa comienza declarando fptr, un puntero-a-función que acepta un entero y
devuelve un char (M.1). A continuación se inicia de forma que señale a la función auxa
(que cumple con las condiciones exigidas por el puntero).

En M.3 se escribe la primera salida. Observe que el tercer argumento de cout es el
valor devuelto por una invocación a auxa pasándole un 5 como argumento. En este
contexto las sentencias

       auxa(n);
       (* fpointer)(n);
       fpointer(n);

son equivalentes.

En M.4 se realiza una invocación a escribe utilizando como segundo argumento es el
puntero fptr definido en las líneas anteriores. Esta invocación es responsable de la
segunda y tercera salidas.

Weitere ähnliche Inhalte

Was ist angesagt?

Integral Iterada y Calculo de Integrales Dobles ccesa007
Integral Iterada  y Calculo de Integrales Dobles  ccesa007Integral Iterada  y Calculo de Integrales Dobles  ccesa007
Integral Iterada y Calculo de Integrales Dobles ccesa007Demetrio Ccesa Rayme
 
Conjuntos teoria de probabilidad
Conjuntos teoria de probabilidadConjuntos teoria de probabilidad
Conjuntos teoria de probabilidadCroonchi
 
Lecture 20 detección en códigos lineales de bloque. generación de códigos cíc...
Lecture 20 detección en códigos lineales de bloque. generación de códigos cíc...Lecture 20 detección en códigos lineales de bloque. generación de códigos cíc...
Lecture 20 detección en códigos lineales de bloque. generación de códigos cíc...nica2009
 
TEORÍA DE LA INFORMACIÓN Y CODIFICACIÓN FUENTE
TEORÍA DE LA INFORMACIÓN Y CODIFICACIÓN FUENTE TEORÍA DE LA INFORMACIÓN Y CODIFICACIÓN FUENTE
TEORÍA DE LA INFORMACIÓN Y CODIFICACIÓN FUENTE Toño Avilix
 
Estandarización, normalización y regulación de las telecomunicaciones
Estandarización, normalización y regulación de las telecomunicacionesEstandarización, normalización y regulación de las telecomunicaciones
Estandarización, normalización y regulación de las telecomunicacionesMao Herrera
 
Método de la bisección
Método de la bisecciónMétodo de la bisección
Método de la bisecciónKike Prieto
 
Aplicaciones de Espacios y Subespacios Vectoriales en la Carrera de Mecatrónica
Aplicaciones de Espacios y Subespacios Vectoriales en la Carrera de MecatrónicaAplicaciones de Espacios y Subespacios Vectoriales en la Carrera de Mecatrónica
Aplicaciones de Espacios y Subespacios Vectoriales en la Carrera de MecatrónicaBRYANDAVIDCUBIACEDEO
 
Espacios Y Subespacios Vectoriales
Espacios  Y Subespacios VectorialesEspacios  Y Subespacios Vectoriales
Espacios Y Subespacios VectorialesJJhimmy
 
Modelo entidad relación BD Matriculas
Modelo entidad relación BD MatriculasModelo entidad relación BD Matriculas
Modelo entidad relación BD MatriculasEmerson Garay
 
Clase 6 analisis de circuitos LCK
Clase 6 analisis de circuitos LCKClase 6 analisis de circuitos LCK
Clase 6 analisis de circuitos LCKTensor
 
Analisis y diseño de Sistemas - Capitulo 4 (Resumen)
Analisis y diseño de Sistemas - Capitulo 4 (Resumen)Analisis y diseño de Sistemas - Capitulo 4 (Resumen)
Analisis y diseño de Sistemas - Capitulo 4 (Resumen)Alexis Cáceres Montes
 
Autómatas finitos no deterministas
Autómatas finitos no deterministasAutómatas finitos no deterministas
Autómatas finitos no deterministasOmega Tech
 
7 ruidos y distorsiones
7 ruidos y distorsiones7 ruidos y distorsiones
7 ruidos y distorsionesUTU
 

Was ist angesagt? (20)

Integral Iterada y Calculo de Integrales Dobles ccesa007
Integral Iterada  y Calculo de Integrales Dobles  ccesa007Integral Iterada  y Calculo de Integrales Dobles  ccesa007
Integral Iterada y Calculo de Integrales Dobles ccesa007
 
Conjuntos teoria de probabilidad
Conjuntos teoria de probabilidadConjuntos teoria de probabilidad
Conjuntos teoria de probabilidad
 
Detección de errores CRC
Detección de errores CRCDetección de errores CRC
Detección de errores CRC
 
Lecture 20 detección en códigos lineales de bloque. generación de códigos cíc...
Lecture 20 detección en códigos lineales de bloque. generación de códigos cíc...Lecture 20 detección en códigos lineales de bloque. generación de códigos cíc...
Lecture 20 detección en códigos lineales de bloque. generación de códigos cíc...
 
Regresion linealr
Regresion linealrRegresion linealr
Regresion linealr
 
TEORÍA DE LA INFORMACIÓN Y CODIFICACIÓN FUENTE
TEORÍA DE LA INFORMACIÓN Y CODIFICACIÓN FUENTE TEORÍA DE LA INFORMACIÓN Y CODIFICACIÓN FUENTE
TEORÍA DE LA INFORMACIÓN Y CODIFICACIÓN FUENTE
 
Final1 tomasi
Final1 tomasiFinal1 tomasi
Final1 tomasi
 
Estandarización, normalización y regulación de las telecomunicaciones
Estandarización, normalización y regulación de las telecomunicacionesEstandarización, normalización y regulación de las telecomunicaciones
Estandarización, normalización y regulación de las telecomunicaciones
 
Método de la bisección
Método de la bisecciónMétodo de la bisección
Método de la bisección
 
Generaciones de la telefonía celular
Generaciones de la telefonía celularGeneraciones de la telefonía celular
Generaciones de la telefonía celular
 
Aplicaciones de Espacios y Subespacios Vectoriales en la Carrera de Mecatrónica
Aplicaciones de Espacios y Subespacios Vectoriales en la Carrera de MecatrónicaAplicaciones de Espacios y Subespacios Vectoriales en la Carrera de Mecatrónica
Aplicaciones de Espacios y Subespacios Vectoriales en la Carrera de Mecatrónica
 
Fuentes de informacion y entropia
Fuentes de informacion y entropiaFuentes de informacion y entropia
Fuentes de informacion y entropia
 
Espacios Y Subespacios Vectoriales
Espacios  Y Subespacios VectorialesEspacios  Y Subespacios Vectoriales
Espacios Y Subespacios Vectoriales
 
metodo-de-la-falsa-posicion
metodo-de-la-falsa-posicionmetodo-de-la-falsa-posicion
metodo-de-la-falsa-posicion
 
Modelo entidad relación BD Matriculas
Modelo entidad relación BD MatriculasModelo entidad relación BD Matriculas
Modelo entidad relación BD Matriculas
 
Clase 6 analisis de circuitos LCK
Clase 6 analisis de circuitos LCKClase 6 analisis de circuitos LCK
Clase 6 analisis de circuitos LCK
 
Analisis y diseño de Sistemas - Capitulo 4 (Resumen)
Analisis y diseño de Sistemas - Capitulo 4 (Resumen)Analisis y diseño de Sistemas - Capitulo 4 (Resumen)
Analisis y diseño de Sistemas - Capitulo 4 (Resumen)
 
Autómatas finitos no deterministas
Autómatas finitos no deterministasAutómatas finitos no deterministas
Autómatas finitos no deterministas
 
7 ruidos y distorsiones
7 ruidos y distorsiones7 ruidos y distorsiones
7 ruidos y distorsiones
 
Act 13 erlang c
Act 13 erlang cAct 13 erlang c
Act 13 erlang c
 

Ähnlich wie Ejemplo de paso de funciones como parámetros a otra función

Tema 8 www.fresymetal.com
Tema 8 www.fresymetal.comTema 8 www.fresymetal.com
Tema 8 www.fresymetal.comFresyMetal
 
Luis hernandez 22310621
Luis hernandez   22310621Luis hernandez   22310621
Luis hernandez 22310621Luis Miguel
 
Guia De Practica 3
Guia De Practica 3Guia De Practica 3
Guia De Practica 3louis
 
Gestión Dinámica de la Memoria
Gestión Dinámica de la MemoriaGestión Dinámica de la Memoria
Gestión Dinámica de la MemoriaMago Julio Cesar
 
Programación en c (iii parte)
Programación en c (iii parte)Programación en c (iii parte)
Programación en c (iii parte)MarielaCuriel
 
Trabajo programacion 1 jose silva
Trabajo programacion 1 jose silvaTrabajo programacion 1 jose silva
Trabajo programacion 1 jose silvaJhosse Ant Siilva
 
Tema 7 www.fresymetal.com
Tema 7 www.fresymetal.comTema 7 www.fresymetal.com
Tema 7 www.fresymetal.comFresyMetal
 
Apuntadores-Programación
Apuntadores-ProgramaciónApuntadores-Programación
Apuntadores-ProgramaciónReina Rodriguez
 
Investigacion de elementos y codigos de c++
Investigacion de elementos y codigos de c++Investigacion de elementos y codigos de c++
Investigacion de elementos y codigos de c++Leonardo Torres
 
Lenguaje de programación c
Lenguaje de programación cLenguaje de programación c
Lenguaje de programación cvictdiazm
 
Algoritmos y lenjuage de programacion
Algoritmos y  lenjuage de programacionAlgoritmos y  lenjuage de programacion
Algoritmos y lenjuage de programacionYsaac Ruiz
 
Introducción a los Punteros en el lenguaje C
Introducción a los Punteros en el lenguaje CIntroducción a los Punteros en el lenguaje C
Introducción a los Punteros en el lenguaje CDiego Santimateo
 
Metodos funciones
Metodos funcionesMetodos funciones
Metodos funcioneseulo10
 
ENTRADA Y SALIDA DE DATOS EN JAVA
ENTRADA Y SALIDA DE DATOS EN JAVAENTRADA Y SALIDA DE DATOS EN JAVA
ENTRADA Y SALIDA DE DATOS EN JAVAGabriel Suarez
 

Ähnlich wie Ejemplo de paso de funciones como parámetros a otra función (20)

Tema 8 www.fresymetal.com
Tema 8 www.fresymetal.comTema 8 www.fresymetal.com
Tema 8 www.fresymetal.com
 
Luis hernandez 22310621
Luis hernandez   22310621Luis hernandez   22310621
Luis hernandez 22310621
 
Guia De Practica 3
Guia De Practica 3Guia De Practica 3
Guia De Practica 3
 
Gestión Dinámica de la Memoria
Gestión Dinámica de la MemoriaGestión Dinámica de la Memoria
Gestión Dinámica de la Memoria
 
Programación en c (iii parte)
Programación en c (iii parte)Programación en c (iii parte)
Programación en c (iii parte)
 
Trabajo programacion 1 jose silva
Trabajo programacion 1 jose silvaTrabajo programacion 1 jose silva
Trabajo programacion 1 jose silva
 
Tipo de Operadores
Tipo de OperadoresTipo de Operadores
Tipo de Operadores
 
Codigos C+++
Codigos C+++Codigos C+++
Codigos C+++
 
Tema 7 www.fresymetal.com
Tema 7 www.fresymetal.comTema 7 www.fresymetal.com
Tema 7 www.fresymetal.com
 
Apuntadores-Programación
Apuntadores-ProgramaciónApuntadores-Programación
Apuntadores-Programación
 
Investigacion de elementos y codigos de c++
Investigacion de elementos y codigos de c++Investigacion de elementos y codigos de c++
Investigacion de elementos y codigos de c++
 
Códigos c++
Códigos c++Códigos c++
Códigos c++
 
Lenguaje de programación c
Lenguaje de programación cLenguaje de programación c
Lenguaje de programación c
 
Algoritmos y lenjuage de programacion
Algoritmos y  lenjuage de programacionAlgoritmos y  lenjuage de programacion
Algoritmos y lenjuage de programacion
 
Solucion ejercicios punteros cadenas-vectores
Solucion ejercicios punteros cadenas-vectoresSolucion ejercicios punteros cadenas-vectores
Solucion ejercicios punteros cadenas-vectores
 
Introducción a los Punteros en el lenguaje C
Introducción a los Punteros en el lenguaje CIntroducción a los Punteros en el lenguaje C
Introducción a los Punteros en el lenguaje C
 
Metodos funciones
Metodos funcionesMetodos funciones
Metodos funciones
 
Funcionesenlenguaje c
Funcionesenlenguaje cFuncionesenlenguaje c
Funcionesenlenguaje c
 
Programación 1: funciones en C
Programación 1: funciones en CProgramación 1: funciones en C
Programación 1: funciones en C
 
ENTRADA Y SALIDA DE DATOS EN JAVA
ENTRADA Y SALIDA DE DATOS EN JAVAENTRADA Y SALIDA DE DATOS EN JAVA
ENTRADA Y SALIDA DE DATOS EN JAVA
 

Mehr von Salvador Fernández Fernández

10 mentiras con las que siempre engañan a los diseñadores gráficos por John Dani
10 mentiras con las que siempre engañan a los diseñadores gráficos por John Dani10 mentiras con las que siempre engañan a los diseñadores gráficos por John Dani
10 mentiras con las que siempre engañan a los diseñadores gráficos por John DaniSalvador Fernández Fernández
 
10 mentiras con las que siempre engañan a los diseñadores gráficos por John Dani
10 mentiras con las que siempre engañan a los diseñadores gráficos por John Dani10 mentiras con las que siempre engañan a los diseñadores gráficos por John Dani
10 mentiras con las que siempre engañan a los diseñadores gráficos por John DaniSalvador Fernández Fernández
 
Varios Algoritmos Voraces De DecisióN Y OptimizacióN
Varios Algoritmos Voraces De DecisióN Y OptimizacióNVarios Algoritmos Voraces De DecisióN Y OptimizacióN
Varios Algoritmos Voraces De DecisióN Y OptimizacióNSalvador Fernández Fernández
 

Mehr von Salvador Fernández Fernández (20)

Servicio web soap en java con net beans
Servicio web soap en java con net beansServicio web soap en java con net beans
Servicio web soap en java con net beans
 
Web services
Web servicesWeb services
Web services
 
Ejemplo Base de Datos SQLite (Android)
Ejemplo Base de Datos SQLite (Android)Ejemplo Base de Datos SQLite (Android)
Ejemplo Base de Datos SQLite (Android)
 
Práctica nominas
Práctica nominasPráctica nominas
Práctica nominas
 
Ejemplo usopunteros
Ejemplo usopunterosEjemplo usopunteros
Ejemplo usopunteros
 
Ejercicios punteros cadenas-vectores
Ejercicios punteros cadenas-vectoresEjercicios punteros cadenas-vectores
Ejercicios punteros cadenas-vectores
 
Diagramas de flujo
Diagramas de flujoDiagramas de flujo
Diagramas de flujo
 
Introducción a Enterprise Java Beans
Introducción a Enterprise Java BeansIntroducción a Enterprise Java Beans
Introducción a Enterprise Java Beans
 
Colorear fotografias en blanco y negro
Colorear fotografias en blanco y negroColorear fotografias en blanco y negro
Colorear fotografias en blanco y negro
 
10 mentiras con las que siempre engañan a los diseñadores gráficos por John Dani
10 mentiras con las que siempre engañan a los diseñadores gráficos por John Dani10 mentiras con las que siempre engañan a los diseñadores gráficos por John Dani
10 mentiras con las que siempre engañan a los diseñadores gráficos por John Dani
 
10 mentiras con las que siempre engañan a los diseñadores gráficos por John Dani
10 mentiras con las que siempre engañan a los diseñadores gráficos por John Dani10 mentiras con las que siempre engañan a los diseñadores gráficos por John Dani
10 mentiras con las que siempre engañan a los diseñadores gráficos por John Dani
 
Wallpaper natural
Wallpaper naturalWallpaper natural
Wallpaper natural
 
SQL
SQLSQL
SQL
 
Cableado Estructurado de Red
Cableado Estructurado de RedCableado Estructurado de Red
Cableado Estructurado de Red
 
Redes De Computadores UOC
Redes De Computadores UOCRedes De Computadores UOC
Redes De Computadores UOC
 
Fundamentos Divide Y Venceras
Fundamentos Divide Y VencerasFundamentos Divide Y Venceras
Fundamentos Divide Y Venceras
 
Divide y Vencerás
Divide y VencerásDivide y Vencerás
Divide y Vencerás
 
Java orientado a objetos
Java orientado a objetosJava orientado a objetos
Java orientado a objetos
 
Varios Algoritmos Voraces De DecisióN Y OptimizacióN
Varios Algoritmos Voraces De DecisióN Y OptimizacióNVarios Algoritmos Voraces De DecisióN Y OptimizacióN
Varios Algoritmos Voraces De DecisióN Y OptimizacióN
 
PlanificacióN Temporal Esquema Voraz Tecnoacademy
PlanificacióN Temporal Esquema Voraz TecnoacademyPlanificacióN Temporal Esquema Voraz Tecnoacademy
PlanificacióN Temporal Esquema Voraz Tecnoacademy
 

Kürzlich hochgeladen

pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxLolaBunny11
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfJulian Lamprea
 

Kürzlich hochgeladen (10)

pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 

Ejemplo de paso de funciones como parámetros a otra función

  • 1. EJEMPLO DE PASO DE FUNCIONES COMO PARÁMETROS A OTRA FUNCIÓN #include <iostream> #include <conio.h> char auxa(int posicion); // prototipo de auxa void escribe (int posicion, char (* ptr)(int) ); // L.5: prototipo de escribe int main() { // ====================== char (* fptr) (int); // M.1: declara fptr puntero-a-función fptr = auxa; // M.2: inicia fptr cout<<"La letra ”<<5<<” es una: “<< auxa(5)<<endl; escribe (5, fptr); // M.4: llamada a escribe return (0); } char auxa (int num) { // Definición de auxa char * str = "Hola mundo"; return str[num]; // L.16 } void escribe (int pos, char (* fpointer)(int) ) { // definición de escribe char ch ; printf ("Estoy recibiendo la letra: %cn", auxa(pos)); ch = (* fpointer)(6); printf ("Estoy inventando la letra: %cn", ch); } Salida: La letra 5 es una: m Estoy recibiendo la letra: m Estoy inventando la letra: u Comentario: La función auxa recibe un entero y devuelve un carácter. El puntero str a la matriz de caracteres "Hola mundo" es una variable local de esta función. El lector observador, percibirá que el carácter devuelto en L.16, se obtiene utilizando una notación de puntero con subíndice, algo extraño a la luz de la expuesto hasta ahora. En realidad también podríamos haber puesto: return *(str+num); // L.16-bis Al tratar de las matrices justificaremos la notación de subíndices más compacta. Por el momento el lector puede aceptar la que le resulte más cómoda. También observar que
  • 2. en este caso hemos suprimido el paréntesis en el valor devuelto por no ser realmente necesario. return (str[num]) == return str[num] La función escribe recibe dos parámetros: un entero, y un puntero-a-función aceptando un entero y devolviendo un carácter. Su prototipo está en L.5, y su definición en L.18. Observe que esta función proporciona dos salidas. La primera de ellas es una invocación a cout parecida a la realizada en M.3, en la que el segundo argumento es también el resultado de una invocación directa a auxa. La segunda se realiza también mediante un cout, pero en este caso, se utiliza directamente un char como segundo argumento, que es proporcionado por la variable local ch. El punto interesante aquí es que su valor se ha obtenido mediante una invocación a auxa a través de un puntero. El programa comienza declarando fptr, un puntero-a-función que acepta un entero y devuelve un char (M.1). A continuación se inicia de forma que señale a la función auxa (que cumple con las condiciones exigidas por el puntero). En M.3 se escribe la primera salida. Observe que el tercer argumento de cout es el valor devuelto por una invocación a auxa pasándole un 5 como argumento. En este contexto las sentencias auxa(n); (* fpointer)(n); fpointer(n); son equivalentes. En M.4 se realiza una invocación a escribe utilizando como segundo argumento es el puntero fptr definido en las líneas anteriores. Esta invocación es responsable de la segunda y tercera salidas.