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?

caracteristicas de canal comunicaciones
 caracteristicas de canal comunicaciones caracteristicas de canal comunicaciones
caracteristicas de canal comunicacionesVíctor Núñez
 
Procesamiento digital de señales con matlab
Procesamiento digital de señales con matlabProcesamiento digital de señales con matlab
Procesamiento digital de señales con matlabPercy Julio Chambi Pacco
 
Modulacion FM
Modulacion FMModulacion FM
Modulacion FMgbermeo
 
Guía rápida tmr0 e interrupciones
Guía rápida tmr0 e interrupcionesGuía rápida tmr0 e interrupciones
Guía rápida tmr0 e interrupcionesLuis Zurita
 
Dispositivo logico programable
Dispositivo logico programableDispositivo logico programable
Dispositivo logico programablepancho_55
 
Convolucion Tiempo Discreto
Convolucion Tiempo DiscretoConvolucion Tiempo Discreto
Convolucion Tiempo Discretoguest1e528d
 
Ruido En Sistemas De Comunicaciones
Ruido En Sistemas De ComunicacionesRuido En Sistemas De Comunicaciones
Ruido En Sistemas De Comunicacionesgbermeo
 
36908974 que-es-el-indice-de-modulacion
36908974 que-es-el-indice-de-modulacion36908974 que-es-el-indice-de-modulacion
36908974 que-es-el-indice-de-modulacionasaashasjja
 
Modulacion Digital de Señales Analogicas
Modulacion Digital de Señales AnalogicasModulacion Digital de Señales Analogicas
Modulacion Digital de Señales AnalogicasCarlos Toth
 
Ejercicios resueltos y_propuestos_adc_da
Ejercicios resueltos y_propuestos_adc_daEjercicios resueltos y_propuestos_adc_da
Ejercicios resueltos y_propuestos_adc_daCesar Gil Arrieta
 
Presentacion-Lineas-Transmision-Terminadas.pdf
Presentacion-Lineas-Transmision-Terminadas.pdfPresentacion-Lineas-Transmision-Terminadas.pdf
Presentacion-Lineas-Transmision-Terminadas.pdfMELVINGUTIERREZ16
 
Banda transportadora-controlada-con-fpga-en-vhdl
Banda transportadora-controlada-con-fpga-en-vhdlBanda transportadora-controlada-con-fpga-en-vhdl
Banda transportadora-controlada-con-fpga-en-vhdlPipe Acosta
 
Clase 13 la onda plana uniforme TE
Clase 13 la onda plana uniforme TEClase 13 la onda plana uniforme TE
Clase 13 la onda plana uniforme TETensor
 
Como agregar letra ñ en lcd con Arduino uno r3
Como agregar letra ñ en lcd con Arduino uno r3Como agregar letra ñ en lcd con Arduino uno r3
Como agregar letra ñ en lcd con Arduino uno r3Israel Magaña
 

Was ist angesagt? (20)

caracteristicas de canal comunicaciones
 caracteristicas de canal comunicaciones caracteristicas de canal comunicaciones
caracteristicas de canal comunicaciones
 
Interrupciones
InterrupcionesInterrupciones
Interrupciones
 
Procesamiento digital de señales con matlab
Procesamiento digital de señales con matlabProcesamiento digital de señales con matlab
Procesamiento digital de señales con matlab
 
Modulacion FM
Modulacion FMModulacion FM
Modulacion FM
 
Programación PIC16F84A
Programación PIC16F84AProgramación PIC16F84A
Programación PIC16F84A
 
Guía rápida tmr0 e interrupciones
Guía rápida tmr0 e interrupcionesGuía rápida tmr0 e interrupciones
Guía rápida tmr0 e interrupciones
 
Dispositivo logico programable
Dispositivo logico programableDispositivo logico programable
Dispositivo logico programable
 
Convolucion Tiempo Discreto
Convolucion Tiempo DiscretoConvolucion Tiempo Discreto
Convolucion Tiempo Discreto
 
Oscilador de puente wien
Oscilador de puente wienOscilador de puente wien
Oscilador de puente wien
 
Función de transferencia
Función de transferenciaFunción de transferencia
Función de transferencia
 
Ruido En Sistemas De Comunicaciones
Ruido En Sistemas De ComunicacionesRuido En Sistemas De Comunicaciones
Ruido En Sistemas De Comunicaciones
 
Tipos De Modulación
Tipos De ModulaciónTipos De Modulación
Tipos De Modulación
 
36908974 que-es-el-indice-de-modulacion
36908974 que-es-el-indice-de-modulacion36908974 que-es-el-indice-de-modulacion
36908974 que-es-el-indice-de-modulacion
 
Modulacion Digital de Señales Analogicas
Modulacion Digital de Señales AnalogicasModulacion Digital de Señales Analogicas
Modulacion Digital de Señales Analogicas
 
Ejercicios resueltos y_propuestos_adc_da
Ejercicios resueltos y_propuestos_adc_daEjercicios resueltos y_propuestos_adc_da
Ejercicios resueltos y_propuestos_adc_da
 
Registro de banderas y alu
Registro de banderas y aluRegistro de banderas y alu
Registro de banderas y alu
 
Presentacion-Lineas-Transmision-Terminadas.pdf
Presentacion-Lineas-Transmision-Terminadas.pdfPresentacion-Lineas-Transmision-Terminadas.pdf
Presentacion-Lineas-Transmision-Terminadas.pdf
 
Banda transportadora-controlada-con-fpga-en-vhdl
Banda transportadora-controlada-con-fpga-en-vhdlBanda transportadora-controlada-con-fpga-en-vhdl
Banda transportadora-controlada-con-fpga-en-vhdl
 
Clase 13 la onda plana uniforme TE
Clase 13 la onda plana uniforme TEClase 13 la onda plana uniforme TE
Clase 13 la onda plana uniforme TE
 
Como agregar letra ñ en lcd con Arduino uno r3
Como agregar letra ñ en lcd con Arduino uno r3Como agregar letra ñ en lcd con Arduino uno r3
Como agregar letra ñ en lcd con Arduino uno r3
 

Ä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

Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanamcerpam
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxJorgeParada26
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.FlorenciaCattelani
 
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
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfAnnimoUno1
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21mariacbr99
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estossgonzalezp1
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...JohnRamos830530
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxMiguelAtencio10
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfvladimiroflores1
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxAlan779941
 

Kürzlich hochgeladen (11)

Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
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
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 

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.