SlideShare une entreprise Scribd logo
1  sur  35
Télécharger pour lire hors ligne
Evaluación escrita
 Indique como se realiza la declaración y la
 llamada a una función
 Indique como se declara y asigna valores a un
 array
 Describa las ventajas de usar estructuras y como se
 declaran
Ejercicios
 Elabore un programa que lea una cadena de 50
 caracteres y convierta las vocales en mayúsculas
 Elabore un programa que obtenga el determinante
 de una matriz 3x3 ingresada por el usuario
PUNTEROS
(
(APUNTADORES)
            )
Sugerencias y herramientas para crear para crear y presentar diapositivas en
formato panorámico
Contenido
 Direcciones en memoria   Aritmética de punteros
                                        p
 Concepto de puntero      Punteros constantes frente
 (apuntador)              a punteros a constantes
 Puntero null y void
 P t       ll     id      Punteros como argumento
 Punteros a punteros      de funciones
 Punteros a Arrays        Punteros a funciones
 Arrays de punteros       Punteros a estructuras
 Punteros a cadenas       Ejercicios
                           j
Dirección de memoria
 Cuando una variable se declara, se asocian tres
                                   ,
 atributos fundamentales con la misma: su nombre, su
 tipo y su dirección de memoria
   Int n;
   Asocia al nombre n, el tipo int y la dirección de alguna
                            p                          g
   posición de memoria donde se almacena el valor de n
Cont…
Cont
 Al valor de la variable se accede por medio de su
                                    p
 nombre. Por ejemplo, se puede imprimir el valor de n
 con la sentencia;
   Printf (“%d”,n);
 A la dirección de la variable se accede por medio del
 operador de dirección &. Por ejemplo, se puede
 imprimir la dirección de n con la sentencia:
   Printf (“%p”,&n);
   P i tf (“% ” & )
Ejemplo 10 1
        10.1
 Obtener el valor y la dirección de una variable
    #include
    # l d <stdio.h>
                 d h
    #include <stdlib.h>
    int main ()
    {
          int n=75;
          printf("n=%dn",n);
          printf( &n=%pn &n);
          printf("&n=%pn",&n);
          system("pause");
          return 0;
          }
Concepto de puntero (apuntador)
 Un puntero es una variable que contiene una dirección de memoria
 El tipo de variable que almacena una dirección se denomina puntero
 Los punteros se rigen por estas reglas básicas:
   Un puntero es una variable como cualquier otra;
   Una variable puntero contiene una dirección que apunta a otra posición
   en memoria
   En esa posición se almacenan los datos a los que apunta el puntero
   Un puntero apunta a una variable de memoria
Ejemplo 10 2
        10.2
 #include <stdio.h>
 #include <stdlib.h>
 #i l d < dlib h>
 int main ()
 {
     int 75
     i n=75;
     int*p=&n;
     printf("n=%d, &n=%p, p=%pn",n,&n,p);
     printf("&p=%pn",&p);
        i tf("& %  " & )
     system("PAUSE");
     return 0;
 }
Declaración de punteros
 Al igual que cualquier variable, las variables punteros
     g     q      q             ,               p
 han de ser declaradas antes de utilizarlas. La
 declaración de una variable puntero debe indicar al
 compilador el tipo de dato al que apunta el puntero;
 para ello se hace preceder a su nombre con un
 asterisco (*)
 <tipo de dato apuntado>*<identificador de puntero>
 Float*f;
 Fl t*f
Inicialización de punteros
 La inicialización de un puntero proporciona a ese puntero la
 dirección del dato correspondiente. Para asignar una
 dirección de memoria a un puntero se utiliza el operador de
 referencia &.
 &valor
   Int i;
   Int *p;
   P=&i; /*asigna la dirección de i a p*/
   *p=50; /*asigna un valor a la dirección de memoria /
     p 50; / asigna                           memoria*/
Indireccion de punteros
                           #include <stdio.h>
 El uso de un puntero      #include <stdlib h>
                                    <stdlib.h>
                           char c;
 para obtener el valor     int main()

 al que apunta es decir,
         apunta, decir     {
                               char *pc;

 su dato apuntado se           pc=&c;
                               for(c='A';c<='Z';c++)

 denomina indireccionar        printf("%c",*pc);
                               printf("n");

 el puntero                    system("pause");
                               return 0;
                           }
Punteros null y void
 Un puntero nulo no apunta a ninguna parte, no direcciona ningún dato
 valido en memoria
   lid          i
    #define NULL 0
 Otra forma de declarar un puntero nulo es asignar un valor de 0
    Int *ptr=0;
 Los punteros nulos se utilizan con frecuencia en programas con arrays de
 punteros
 En C se puede declarar un puntero de modo que apunte a cualquier tipo
 de dato, es decir, no se asigna a un tipo de dato especifico. El método es
 declarar el puntero como puntero void* denominado puntero genérico
    Void *prt
Punteros a punteros
 Un puntero puede apuntar a otra variable puntero. Este
 concepto se utiliza con mucha frecuencia en programas
 complejos de C. para declarar un puntero a un puntero
     p j           p               p             p
 se hace preceder a la variable con dos asteriscos (**)
   Int valor_e=100;;
   Int *ptr1=&valor_e;
   Int **ptr5=&ptr1;
         ptr5 &ptr1;
Punteros y Arrays
 Se pueden direccionar arrays como si fueran
      p                       y
 punteros y punteros como si fueran arrays. La
 posibilidad de almacenar y acceder a punteros y
 arrays, implica que se pueden almacenar cadenas
 de datos en elementos de arrays. Sin punteros eso
 no es posible, ya que no existe el tipo de dato
 cadena en C. no existen variables de cadena,
 únicamente constantes d cadena
 ú i                   de d
Nombres de arrays como punteros
 Un nombre de un array es simplemente un puntero.
 Supongamos que se tiene la siguiente declaración de un
 array:
 In lista[5]={10 20 30 40 50}
    lista[5]={10,20,30,40,50}
 Si se manda a visualizar lista[0] se vera 10 y si se manda a
 visualizar *lista. Como un nombre de un array es un puntero,
 también se vera 10  0
 Dado que un nombre de un array contiene la dirección del
 primer elemento del array se debe indireccionar el puntero
                       array,
 para obtener el valor del elemento
Arrays de punteros
 Si se necesita reservar muchos punteros a muchos
                                    p
 valores diferentes, se puede declara un array de
 punteros. Un array de punteros es un array que
 contiene como elementos punteros, cada uno de los
 cuales apunta a un tipo de dato especifico. La linea
 siguiente reserva un array de diez variables puntero a
 enteros:
 Int *ptr[10];
      ptr[10];
Inicialización de un array de punteros a cadenas
 La inicialización de un array de punteros a cadenas
 se puede realizar con una declaración similar a
 esta;
 Char
 *nombres_meses[12]={“enero”,”febrero”,”marzo”,”
 *     b           [12]={“       ” ”f b    ””      ””
 abril”,”mayo”,”junio”,”julio”,”agosto”,”septiembre”,”
 octubre”,”noviembre”,”diciembre”};
     b ” ” i b ” ”di i b ”}
Punteros de cadenas
 Los punteros se pueden utilizar en lugar de índices
     p           p                    g
 de arrays. Considérese la siguiente declaración de
 un array de caracteres que contiene las letras del
 alfabeto;
 Char alfabeto[27]=“ABCDE….z”;
               [ ]               ;
 P=&alfabeto[0]
 Printf( %cn p);
 Printf(“%cn”,*p);
Aritmética de punteros
 Al contrario que un nombre de un array, que es un puntero constante y no
 se puede modificar, un puntero es una variable que se puede modificar.
        d      difi            t               i bl           d     difi
 Como consecuencia, se pueden realizar ciertas operaciones aritméticas
 sobre punteros
 A un puntero se le puede sumar o restar un entero n; esto hace que apunte
 n posiciones adelante, o atrás del actual. Las operaciones no validas son;
 suma, multiplicación o división entre dos punteros
    Float m[20];
    Float *r;
    r=m;
    r++
Ejemplo conversión de caracteres 10 8
                                 10.8
 Convierte caracteres de minúsculas a mayúsculas
Punteros constantes frente a punteros a constantes

  Un puntero constante es un puntero que no se puede
  cambiar, pero que los datos apuntados por el
  puntero pueden ser cambiados Por otra parte un
                      cambiados.            parte,
  puntero a una constante se puede modificar para
  apuntar a una constante diferente pero los datos
                            diferente,
  apuntados por el puntero no se pueden cambiar
Punteros constantes
 Para crear un puntero constante diferente de un array,
 se debe utilizar el siguiente formato:
   <Tipo de dato>*const<nombre puntero>=<dirección de
   variable>;
   Int x;
   Int y;
   Int *const p1=&x;
   *p1=y, es legal ya que se cambia el contenido de memoria
   p1=&y , no es legal ya que se cambia el valor del puntero
Punteros a constantes
 El formato para definir un puntero a una constante es;
            p               p                         ;
   Const<tipo de dato elemento>*<nombre
   puntero>=<dirección de constante>;
   Const int x=25;
   Const int y=50;
   Const int *p1=&x;
   P1=&y, p1 apunta a otra constante
   *p1=15,
   * 1 15 crea un error de compilación
                         d      il ió
Punteros constantes a constantes
 El ultimo caso a considerar es crear punteros constantes
 a constantes utilizando el formato siguiente;
   Const <tipo de dato elemento> *const <nombre
   puntero>=<direccion de constante>;
   Const int x=25;
   Const int *const p1=&x;
                    p    ;
   P1 es un entero constante que apunta a una constante
   entera x, cualquier intento de modificar p1 o bien *p1
   producirá un error
Punteros como argumentos de funciones
 Cuando se pasa una variable a una función (paso por valor)
 no se puede cambiar el valor de esa variable. Sin embargo,
 si se pasa un puntero a una variable a una función (paso
 p
 por dirección) se puede cambiar el valor de la variable
              ) p
   Void func1 (int *s, int t)   int i, j;
   {                            i=5;
   *s=6;
   * 6                          j=7;
                                j 7
   t=25;                        func1 (&i, j);
   }
Punteros a funciones
 Es posible crear punteros que apunten a funciones. En lugar
    p               p         q     p                      g
 de direccionar datos, los punteros de funciones apuntan a
 código ejecutable. Al igual que los datos, las funciones se
 almacenan en memoria y tienen direcciones iniciales En C se
                                                iniciales.
 pueden asignar las direcciones iniciales de funciones a
 p
 punteros. Tales funciones se pueden llamar en un modo
                                  p
 indirecto, es decir mediante un puntero cuyo valor es igual a
 la dirección inicial de la función en cuestión
   Tipo_de_retorno (*
   Ti   d          (*punteroFuncion) ( li d parametros>);
                            F i ) (<lista de           )
Cont…
Cont
 Un puntero a una función es simplemente un puntero cuyo
     p                            p             p          y
 valor es la dirección del nombre de la función. Dado que el
 nombre es, en si mismo, un puntero; un puntero a una función
 es un puntero a un puntero constante
Inicialización de un puntero a una función
 La sintaxis general para inicializar un puntero a una función
 es:
 punteroFuncion = una función
   double calculo (int*v unsigned n) /*prototipo de función*/
                   (int*v;          n);
   double (*qf) (int*, unsigned); /*puntero a función*/
   Int r[5]={3,5,6,7,1}
            {          }
   double x;
   qf=calculo; /*asigna dirección de la función*/
   x=qf(r,5); /*llamada a la función con el p ntero a función*/
     =qf(r 5)                  f nción       puntero f nción*/
Ejemplo 10 6
        10.6
 Se desea ordenar un array de numero reales, la
 ordenación se va a realizar con la función qsort()
Arrays de punteros de funciones
 Ciertas aplicaciones requieren disponer de numerosas
            p               q          p
 funciones, basadas en el cumplimiento de ciertas
 condiciones. Un método para implementar tal aplicación es
 utilizar una sentencia switch con muchos selectores casecase.
 Otra solución es utilizar un array de punteros de función. Se
 p
 puede seleccionar una función de la lista y llamarla
 La sintaxis general de un array de punteros de función es:
   tipoRetorno (*PunteroFunc[LongArray])(<lista de parametros>)
Punteros a estructuras
 Un puntero también puede apuntar a una estructura. Se
    p                 p        p
 puede declarar un puntero a una estructura tal como se
 declara un puntero a cualquier otro objeto y se declara
 un puntero estructura tal como se declara cualquier otra
 variable estructura: especificando un puntero en lugar
 del nombre de la variable estructura
   Strcuct persona *p; /*se crea un puntero de estructura*/
   p=&empleado;
Ejemplo 10 9
        10.9
 En este ejemplo se declara el tipo estructura
 t_persona, que se asocia con el tipo persona para
 facilidad de escritura Un array de esta estructura
                escritura.
 se inicializa con campos al azar y se muestran por
 pantalla
Ejercicios
 Escribir un programa en que se lean 20 líneas de texto, cada línea
 con un máximo d 80 caracteres. M
           á i de                 Mostrar por pantalla el numero d
                                                    ll l          de
 vocales que tiene cada línea
 Se requiere evaluar las funciones f(x), g(x) y z(x) para todos los
 valores de x en el intervalo 0<=x<=3.5 con incrementos de 0.2.
 escribir un programa que evalué dichas funciones, utilizar un array
 de punteros a función.
   Las funciones son las siguientes;
   F(x)=3*ex-2x
   G(x)=-x*Sin(x)+1.5
     ( )       ( )
   Z(x)=x3-2x+1
Patrón de prueba de pantalla panorámica (16:9)




                               Prueba de la
                                relación de
                                  aspecto
                            (Debe parecer circular)




       4x3

16x9

Contenu connexe

Tendances (20)

Estructuras lineales
Estructuras linealesEstructuras lineales
Estructuras lineales
 
Introducción a los tipos de datos
Introducción a los tipos de datosIntroducción a los tipos de datos
Introducción a los tipos de datos
 
Pilas En C++
Pilas En C++Pilas En C++
Pilas En C++
 
Sintaxis del lenguaje c++
Sintaxis del lenguaje c++Sintaxis del lenguaje c++
Sintaxis del lenguaje c++
 
Modelo entidad relacion
Modelo entidad relacionModelo entidad relacion
Modelo entidad relacion
 
Funcionamiento de un pila
Funcionamiento de un pilaFuncionamiento de un pila
Funcionamiento de un pila
 
Funciones recursivas en C++
Funciones recursivas en C++Funciones recursivas en C++
Funciones recursivas en C++
 
Punteros en c
Punteros en cPunteros en c
Punteros en c
 
tipos de datos
tipos de datostipos de datos
tipos de datos
 
Estructura datos pilas y colas
Estructura datos pilas y colasEstructura datos pilas y colas
Estructura datos pilas y colas
 
tipo de datos
tipo de datostipo de datos
tipo de datos
 
Transformar modelo entidad relacion a modelo logico
Transformar modelo entidad relacion a modelo logicoTransformar modelo entidad relacion a modelo logico
Transformar modelo entidad relacion a modelo logico
 
Ejemplos de algoritmos en C básicos (aprendiendo a programar)
Ejemplos de algoritmos en C básicos (aprendiendo a programar)Ejemplos de algoritmos en C básicos (aprendiendo a programar)
Ejemplos de algoritmos en C básicos (aprendiendo a programar)
 
Estructura selectiva simple con Java
Estructura selectiva simple con JavaEstructura selectiva simple con Java
Estructura selectiva simple con Java
 
Arreglos
ArreglosArreglos
Arreglos
 
Arboles con raiz
Arboles con raizArboles con raiz
Arboles con raiz
 
Una mirada al diagrama Entidad Relación E.E.R.R. por Luicossa
Una mirada al diagrama Entidad Relación E.E.R.R. por LuicossaUna mirada al diagrama Entidad Relación E.E.R.R. por Luicossa
Una mirada al diagrama Entidad Relación E.E.R.R. por Luicossa
 
Modelo relacional
Modelo relacionalModelo relacional
Modelo relacional
 
Estructuras en c++
Estructuras en c++Estructuras en c++
Estructuras en c++
 
Punteros y funciones
Punteros y funciones Punteros y funciones
Punteros y funciones
 

Similaire à PUNTEROS (APUNTADORES) EN C++

Apuntadores, cadenas y estructuras
Apuntadores, cadenas y estructurasApuntadores, cadenas y estructuras
Apuntadores, cadenas y estructurasXendor Resendiz
 
Apuntadores
ApuntadoresApuntadores
Apuntadoresluisabn
 
Luis hernandez 22310621
Luis hernandez   22310621Luis hernandez   22310621
Luis hernandez 22310621Luis Miguel
 
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
 
Tema 8 www.fresymetal.com
Tema 8 www.fresymetal.comTema 8 www.fresymetal.com
Tema 8 www.fresymetal.comFresyMetal
 
Trabajo programacion 1 jose silva
Trabajo programacion 1 jose silvaTrabajo programacion 1 jose silva
Trabajo programacion 1 jose silvaJhosse Ant Siilva
 
Apuntadorkeurjeh4jj4by un 4hh4j4u4jj4h4y4jh4
Apuntadorkeurjeh4jj4by un 4hh4j4u4jj4h4y4jh4Apuntadorkeurjeh4jj4by un 4hh4j4u4jj4h4y4jh4
Apuntadorkeurjeh4jj4by un 4hh4j4u4jj4h4y4jh4hassanbadredun
 
Computacion punteros
Computacion punterosComputacion punteros
Computacion punterosManuel
 
ED 01 tipos_datos_ejercicios
ED 01 tipos_datos_ejerciciosED 01 tipos_datos_ejercicios
ED 01 tipos_datos_ejerciciosA J
 
Guia De Practica 3
Guia De Practica 3Guia De Practica 3
Guia De Practica 3louis
 
Apuntadores y direccionamiento
Apuntadores y direccionamientoApuntadores y direccionamiento
Apuntadores y direccionamientoSergio Ramos
 
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
 
Arreglos
ArreglosArreglos
ArreglosAnt Jfr
 

Similaire à PUNTEROS (APUNTADORES) EN C++ (20)

Apuntadores, cadenas y estructuras
Apuntadores, cadenas y estructurasApuntadores, cadenas y estructuras
Apuntadores, cadenas y estructuras
 
Apuntadores
ApuntadoresApuntadores
Apuntadores
 
Luis hernandez 22310621
Luis hernandez   22310621Luis hernandez   22310621
Luis hernandez 22310621
 
Programación en c (iii parte)
Programación en c (iii parte)Programación en c (iii parte)
Programación en c (iii parte)
 
Punteros
PunterosPunteros
Punteros
 
Tema 8 www.fresymetal.com
Tema 8 www.fresymetal.comTema 8 www.fresymetal.com
Tema 8 www.fresymetal.com
 
Trabajo programacion 1 jose silva
Trabajo programacion 1 jose silvaTrabajo programacion 1 jose silva
Trabajo programacion 1 jose silva
 
Punteros2
Punteros2Punteros2
Punteros2
 
Teoria punteros
Teoria punterosTeoria punteros
Teoria punteros
 
Apuntadorkeurjeh4jj4by un 4hh4j4u4jj4h4y4jh4
Apuntadorkeurjeh4jj4by un 4hh4j4u4jj4h4y4jh4Apuntadorkeurjeh4jj4by un 4hh4j4u4jj4h4y4jh4
Apuntadorkeurjeh4jj4by un 4hh4j4u4jj4h4y4jh4
 
Computacion punteros
Computacion punterosComputacion punteros
Computacion punteros
 
ED 01 tipos_datos_ejercicios
ED 01 tipos_datos_ejerciciosED 01 tipos_datos_ejercicios
ED 01 tipos_datos_ejercicios
 
1 Tipos De Datos Ejercicios
1 Tipos De Datos Ejercicios1 Tipos De Datos Ejercicios
1 Tipos De Datos Ejercicios
 
Material iii parcial
Material iii parcialMaterial iii parcial
Material iii parcial
 
Punteros 2012
Punteros 2012Punteros 2012
Punteros 2012
 
Guia De Practica 3
Guia De Practica 3Guia De Practica 3
Guia De Practica 3
 
Tipos de datos en C
Tipos de datos en CTipos de datos en C
Tipos de datos en C
 
Apuntadores y direccionamiento
Apuntadores y direccionamientoApuntadores y direccionamiento
Apuntadores y direccionamiento
 
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
 
Arreglos
ArreglosArreglos
Arreglos
 

Plus de die_dex

Appendix a introduction tonthe microprocessor and the microcomputer
Appendix a introduction tonthe microprocessor and the microcomputerAppendix a introduction tonthe microprocessor and the microcomputer
Appendix a introduction tonthe microprocessor and the microcomputerdie_dex
 
Comercio internacional
Comercio internacionalComercio internacional
Comercio internacionaldie_dex
 
Analisis del comercio exterior en la ultima década
Analisis del comercio exterior en la ultima décadaAnalisis del comercio exterior en la ultima década
Analisis del comercio exterior en la ultima décadadie_dex
 
Micro-nanosystems for electrical metrology and precision instrumentation
Micro-nanosystems for electrical metrology and precision instrumentationMicro-nanosystems for electrical metrology and precision instrumentation
Micro-nanosystems for electrical metrology and precision instrumentationdie_dex
 
Bolometric Applications at Room Temperature
Bolometric Applications at Room TemperatureBolometric Applications at Room Temperature
Bolometric Applications at Room Temperaturedie_dex
 
Proposed changes to the definition of the ampere and the kilogram and their i...
Proposed changes to the definition of the ampere and the kilogram and their i...Proposed changes to the definition of the ampere and the kilogram and their i...
Proposed changes to the definition of the ampere and the kilogram and their i...die_dex
 
Analog to Digital Converters Testing
Analog to Digital Converters TestingAnalog to Digital Converters Testing
Analog to Digital Converters Testingdie_dex
 
Towards Uniformity of DC Voltage Metrology within SIM
Towards Uniformity of DC Voltage Metrology within SIMTowards Uniformity of DC Voltage Metrology within SIM
Towards Uniformity of DC Voltage Metrology within SIMdie_dex
 
FUENTES DE ENERGÍA RENOVABLE EN EL SUR DE ECUADOR
FUENTES DE ENERGÍA RENOVABLE EN EL SUR DE ECUADORFUENTES DE ENERGÍA RENOVABLE EN EL SUR DE ECUADOR
FUENTES DE ENERGÍA RENOVABLE EN EL SUR DE ECUADORdie_dex
 
Urgencia hipertensiva
Urgencia hipertensivaUrgencia hipertensiva
Urgencia hipertensivadie_dex
 
Guia para la_atencion_del_parto_normal_en_mcf
Guia para la_atencion_del_parto_normal_en_mcfGuia para la_atencion_del_parto_normal_en_mcf
Guia para la_atencion_del_parto_normal_en_mcfdie_dex
 
Equipo humano y materiales para recepción de recién
Equipo humano y materiales para recepción de reciénEquipo humano y materiales para recepción de recién
Equipo humano y materiales para recepción de reciéndie_dex
 
Crisis hipertensivas
Crisis hipertensivasCrisis hipertensivas
Crisis hipertensivasdie_dex
 
GENERACIÓN ELÉCTRICA
GENERACIÓN ELÉCTRICAGENERACIÓN ELÉCTRICA
GENERACIÓN ELÉCTRICAdie_dex
 
FORMATO IEEE
FORMATO IEEEFORMATO IEEE
FORMATO IEEEdie_dex
 
HISTORIA DE LAS TELECOMUNICACIONES
HISTORIA DE LAS TELECOMUNICACIONESHISTORIA DE LAS TELECOMUNICACIONES
HISTORIA DE LAS TELECOMUNICACIONESdie_dex
 
Lojapioneradelageneracinelectricaenecuador 120118235501-phpapp01
Lojapioneradelageneracinelectricaenecuador 120118235501-phpapp01Lojapioneradelageneracinelectricaenecuador 120118235501-phpapp01
Lojapioneradelageneracinelectricaenecuador 120118235501-phpapp01die_dex
 
Metrologia
MetrologiaMetrologia
Metrologiadie_dex
 
Mediciones e instrumentacion_industrial
Mediciones e instrumentacion_industrialMediciones e instrumentacion_industrial
Mediciones e instrumentacion_industrialdie_dex
 

Plus de die_dex (20)

Appendix a introduction tonthe microprocessor and the microcomputer
Appendix a introduction tonthe microprocessor and the microcomputerAppendix a introduction tonthe microprocessor and the microcomputer
Appendix a introduction tonthe microprocessor and the microcomputer
 
Comercio internacional
Comercio internacionalComercio internacional
Comercio internacional
 
Analisis del comercio exterior en la ultima década
Analisis del comercio exterior en la ultima décadaAnalisis del comercio exterior en la ultima década
Analisis del comercio exterior en la ultima década
 
Micro-nanosystems for electrical metrology and precision instrumentation
Micro-nanosystems for electrical metrology and precision instrumentationMicro-nanosystems for electrical metrology and precision instrumentation
Micro-nanosystems for electrical metrology and precision instrumentation
 
Bolometric Applications at Room Temperature
Bolometric Applications at Room TemperatureBolometric Applications at Room Temperature
Bolometric Applications at Room Temperature
 
Proposed changes to the definition of the ampere and the kilogram and their i...
Proposed changes to the definition of the ampere and the kilogram and their i...Proposed changes to the definition of the ampere and the kilogram and their i...
Proposed changes to the definition of the ampere and the kilogram and their i...
 
Analog to Digital Converters Testing
Analog to Digital Converters TestingAnalog to Digital Converters Testing
Analog to Digital Converters Testing
 
Towards Uniformity of DC Voltage Metrology within SIM
Towards Uniformity of DC Voltage Metrology within SIMTowards Uniformity of DC Voltage Metrology within SIM
Towards Uniformity of DC Voltage Metrology within SIM
 
Web 2.0
Web 2.0Web 2.0
Web 2.0
 
FUENTES DE ENERGÍA RENOVABLE EN EL SUR DE ECUADOR
FUENTES DE ENERGÍA RENOVABLE EN EL SUR DE ECUADORFUENTES DE ENERGÍA RENOVABLE EN EL SUR DE ECUADOR
FUENTES DE ENERGÍA RENOVABLE EN EL SUR DE ECUADOR
 
Urgencia hipertensiva
Urgencia hipertensivaUrgencia hipertensiva
Urgencia hipertensiva
 
Guia para la_atencion_del_parto_normal_en_mcf
Guia para la_atencion_del_parto_normal_en_mcfGuia para la_atencion_del_parto_normal_en_mcf
Guia para la_atencion_del_parto_normal_en_mcf
 
Equipo humano y materiales para recepción de recién
Equipo humano y materiales para recepción de reciénEquipo humano y materiales para recepción de recién
Equipo humano y materiales para recepción de recién
 
Crisis hipertensivas
Crisis hipertensivasCrisis hipertensivas
Crisis hipertensivas
 
GENERACIÓN ELÉCTRICA
GENERACIÓN ELÉCTRICAGENERACIÓN ELÉCTRICA
GENERACIÓN ELÉCTRICA
 
FORMATO IEEE
FORMATO IEEEFORMATO IEEE
FORMATO IEEE
 
HISTORIA DE LAS TELECOMUNICACIONES
HISTORIA DE LAS TELECOMUNICACIONESHISTORIA DE LAS TELECOMUNICACIONES
HISTORIA DE LAS TELECOMUNICACIONES
 
Lojapioneradelageneracinelectricaenecuador 120118235501-phpapp01
Lojapioneradelageneracinelectricaenecuador 120118235501-phpapp01Lojapioneradelageneracinelectricaenecuador 120118235501-phpapp01
Lojapioneradelageneracinelectricaenecuador 120118235501-phpapp01
 
Metrologia
MetrologiaMetrologia
Metrologia
 
Mediciones e instrumentacion_industrial
Mediciones e instrumentacion_industrialMediciones e instrumentacion_industrial
Mediciones e instrumentacion_industrial
 

PUNTEROS (APUNTADORES) EN C++

  • 1. Evaluación escrita Indique como se realiza la declaración y la llamada a una función Indique como se declara y asigna valores a un array Describa las ventajas de usar estructuras y como se declaran
  • 2. Ejercicios Elabore un programa que lea una cadena de 50 caracteres y convierta las vocales en mayúsculas Elabore un programa que obtenga el determinante de una matriz 3x3 ingresada por el usuario
  • 3. PUNTEROS ( (APUNTADORES) ) Sugerencias y herramientas para crear para crear y presentar diapositivas en formato panorámico
  • 4. Contenido Direcciones en memoria Aritmética de punteros p Concepto de puntero Punteros constantes frente (apuntador) a punteros a constantes Puntero null y void P t ll id Punteros como argumento Punteros a punteros de funciones Punteros a Arrays Punteros a funciones Arrays de punteros Punteros a estructuras Punteros a cadenas Ejercicios j
  • 5. Dirección de memoria Cuando una variable se declara, se asocian tres , atributos fundamentales con la misma: su nombre, su tipo y su dirección de memoria Int n; Asocia al nombre n, el tipo int y la dirección de alguna p g posición de memoria donde se almacena el valor de n
  • 6. Cont… Cont Al valor de la variable se accede por medio de su p nombre. Por ejemplo, se puede imprimir el valor de n con la sentencia; Printf (“%d”,n); A la dirección de la variable se accede por medio del operador de dirección &. Por ejemplo, se puede imprimir la dirección de n con la sentencia: Printf (“%p”,&n); P i tf (“% ” & )
  • 7. Ejemplo 10 1 10.1 Obtener el valor y la dirección de una variable #include # l d <stdio.h> d h #include <stdlib.h> int main () { int n=75; printf("n=%dn",n); printf( &n=%pn &n); printf("&n=%pn",&n); system("pause"); return 0; }
  • 8. Concepto de puntero (apuntador) Un puntero es una variable que contiene una dirección de memoria El tipo de variable que almacena una dirección se denomina puntero Los punteros se rigen por estas reglas básicas: Un puntero es una variable como cualquier otra; Una variable puntero contiene una dirección que apunta a otra posición en memoria En esa posición se almacenan los datos a los que apunta el puntero Un puntero apunta a una variable de memoria
  • 9. Ejemplo 10 2 10.2 #include <stdio.h> #include <stdlib.h> #i l d < dlib h> int main () { int 75 i n=75; int*p=&n; printf("n=%d, &n=%p, p=%pn",n,&n,p); printf("&p=%pn",&p); i tf("& % " & ) system("PAUSE"); return 0; }
  • 10. Declaración de punteros Al igual que cualquier variable, las variables punteros g q q , p han de ser declaradas antes de utilizarlas. La declaración de una variable puntero debe indicar al compilador el tipo de dato al que apunta el puntero; para ello se hace preceder a su nombre con un asterisco (*) <tipo de dato apuntado>*<identificador de puntero> Float*f; Fl t*f
  • 11. Inicialización de punteros La inicialización de un puntero proporciona a ese puntero la dirección del dato correspondiente. Para asignar una dirección de memoria a un puntero se utiliza el operador de referencia &. &valor Int i; Int *p; P=&i; /*asigna la dirección de i a p*/ *p=50; /*asigna un valor a la dirección de memoria / p 50; / asigna memoria*/
  • 12. Indireccion de punteros #include <stdio.h> El uso de un puntero #include <stdlib h> <stdlib.h> char c; para obtener el valor int main() al que apunta es decir, apunta, decir { char *pc; su dato apuntado se pc=&c; for(c='A';c<='Z';c++) denomina indireccionar printf("%c",*pc); printf("n"); el puntero system("pause"); return 0; }
  • 13. Punteros null y void Un puntero nulo no apunta a ninguna parte, no direcciona ningún dato valido en memoria lid i #define NULL 0 Otra forma de declarar un puntero nulo es asignar un valor de 0 Int *ptr=0; Los punteros nulos se utilizan con frecuencia en programas con arrays de punteros En C se puede declarar un puntero de modo que apunte a cualquier tipo de dato, es decir, no se asigna a un tipo de dato especifico. El método es declarar el puntero como puntero void* denominado puntero genérico Void *prt
  • 14. Punteros a punteros Un puntero puede apuntar a otra variable puntero. Este concepto se utiliza con mucha frecuencia en programas complejos de C. para declarar un puntero a un puntero p j p p p se hace preceder a la variable con dos asteriscos (**) Int valor_e=100;; Int *ptr1=&valor_e; Int **ptr5=&ptr1; ptr5 &ptr1;
  • 15. Punteros y Arrays Se pueden direccionar arrays como si fueran p y punteros y punteros como si fueran arrays. La posibilidad de almacenar y acceder a punteros y arrays, implica que se pueden almacenar cadenas de datos en elementos de arrays. Sin punteros eso no es posible, ya que no existe el tipo de dato cadena en C. no existen variables de cadena, únicamente constantes d cadena ú i de d
  • 16. Nombres de arrays como punteros Un nombre de un array es simplemente un puntero. Supongamos que se tiene la siguiente declaración de un array: In lista[5]={10 20 30 40 50} lista[5]={10,20,30,40,50} Si se manda a visualizar lista[0] se vera 10 y si se manda a visualizar *lista. Como un nombre de un array es un puntero, también se vera 10 0 Dado que un nombre de un array contiene la dirección del primer elemento del array se debe indireccionar el puntero array, para obtener el valor del elemento
  • 17. Arrays de punteros Si se necesita reservar muchos punteros a muchos p valores diferentes, se puede declara un array de punteros. Un array de punteros es un array que contiene como elementos punteros, cada uno de los cuales apunta a un tipo de dato especifico. La linea siguiente reserva un array de diez variables puntero a enteros: Int *ptr[10]; ptr[10];
  • 18. Inicialización de un array de punteros a cadenas La inicialización de un array de punteros a cadenas se puede realizar con una declaración similar a esta; Char *nombres_meses[12]={“enero”,”febrero”,”marzo”,” * b [12]={“ ” ”f b ”” ”” abril”,”mayo”,”junio”,”julio”,”agosto”,”septiembre”,” octubre”,”noviembre”,”diciembre”}; b ” ” i b ” ”di i b ”}
  • 19. Punteros de cadenas Los punteros se pueden utilizar en lugar de índices p p g de arrays. Considérese la siguiente declaración de un array de caracteres que contiene las letras del alfabeto; Char alfabeto[27]=“ABCDE….z”; [ ] ; P=&alfabeto[0] Printf( %cn p); Printf(“%cn”,*p);
  • 20. Aritmética de punteros Al contrario que un nombre de un array, que es un puntero constante y no se puede modificar, un puntero es una variable que se puede modificar. d difi t i bl d difi Como consecuencia, se pueden realizar ciertas operaciones aritméticas sobre punteros A un puntero se le puede sumar o restar un entero n; esto hace que apunte n posiciones adelante, o atrás del actual. Las operaciones no validas son; suma, multiplicación o división entre dos punteros Float m[20]; Float *r; r=m; r++
  • 21. Ejemplo conversión de caracteres 10 8 10.8 Convierte caracteres de minúsculas a mayúsculas
  • 22. Punteros constantes frente a punteros a constantes Un puntero constante es un puntero que no se puede cambiar, pero que los datos apuntados por el puntero pueden ser cambiados Por otra parte un cambiados. parte, puntero a una constante se puede modificar para apuntar a una constante diferente pero los datos diferente, apuntados por el puntero no se pueden cambiar
  • 23. Punteros constantes Para crear un puntero constante diferente de un array, se debe utilizar el siguiente formato: <Tipo de dato>*const<nombre puntero>=<dirección de variable>; Int x; Int y; Int *const p1=&x; *p1=y, es legal ya que se cambia el contenido de memoria p1=&y , no es legal ya que se cambia el valor del puntero
  • 24. Punteros a constantes El formato para definir un puntero a una constante es; p p ; Const<tipo de dato elemento>*<nombre puntero>=<dirección de constante>; Const int x=25; Const int y=50; Const int *p1=&x; P1=&y, p1 apunta a otra constante *p1=15, * 1 15 crea un error de compilación d il ió
  • 25. Punteros constantes a constantes El ultimo caso a considerar es crear punteros constantes a constantes utilizando el formato siguiente; Const <tipo de dato elemento> *const <nombre puntero>=<direccion de constante>; Const int x=25; Const int *const p1=&x; p ; P1 es un entero constante que apunta a una constante entera x, cualquier intento de modificar p1 o bien *p1 producirá un error
  • 26. Punteros como argumentos de funciones Cuando se pasa una variable a una función (paso por valor) no se puede cambiar el valor de esa variable. Sin embargo, si se pasa un puntero a una variable a una función (paso p por dirección) se puede cambiar el valor de la variable ) p Void func1 (int *s, int t) int i, j; { i=5; *s=6; * 6 j=7; j 7 t=25; func1 (&i, j); }
  • 27. Punteros a funciones Es posible crear punteros que apunten a funciones. En lugar p p q p g de direccionar datos, los punteros de funciones apuntan a código ejecutable. Al igual que los datos, las funciones se almacenan en memoria y tienen direcciones iniciales En C se iniciales. pueden asignar las direcciones iniciales de funciones a p punteros. Tales funciones se pueden llamar en un modo p indirecto, es decir mediante un puntero cuyo valor es igual a la dirección inicial de la función en cuestión Tipo_de_retorno (* Ti d (*punteroFuncion) ( li d parametros>); F i ) (<lista de )
  • 28. Cont… Cont Un puntero a una función es simplemente un puntero cuyo p p p y valor es la dirección del nombre de la función. Dado que el nombre es, en si mismo, un puntero; un puntero a una función es un puntero a un puntero constante
  • 29. Inicialización de un puntero a una función La sintaxis general para inicializar un puntero a una función es: punteroFuncion = una función double calculo (int*v unsigned n) /*prototipo de función*/ (int*v; n); double (*qf) (int*, unsigned); /*puntero a función*/ Int r[5]={3,5,6,7,1} { } double x; qf=calculo; /*asigna dirección de la función*/ x=qf(r,5); /*llamada a la función con el p ntero a función*/ =qf(r 5) f nción puntero f nción*/
  • 30. Ejemplo 10 6 10.6 Se desea ordenar un array de numero reales, la ordenación se va a realizar con la función qsort()
  • 31. Arrays de punteros de funciones Ciertas aplicaciones requieren disponer de numerosas p q p funciones, basadas en el cumplimiento de ciertas condiciones. Un método para implementar tal aplicación es utilizar una sentencia switch con muchos selectores casecase. Otra solución es utilizar un array de punteros de función. Se p puede seleccionar una función de la lista y llamarla La sintaxis general de un array de punteros de función es: tipoRetorno (*PunteroFunc[LongArray])(<lista de parametros>)
  • 32. Punteros a estructuras Un puntero también puede apuntar a una estructura. Se p p p puede declarar un puntero a una estructura tal como se declara un puntero a cualquier otro objeto y se declara un puntero estructura tal como se declara cualquier otra variable estructura: especificando un puntero en lugar del nombre de la variable estructura Strcuct persona *p; /*se crea un puntero de estructura*/ p=&empleado;
  • 33. Ejemplo 10 9 10.9 En este ejemplo se declara el tipo estructura t_persona, que se asocia con el tipo persona para facilidad de escritura Un array de esta estructura escritura. se inicializa con campos al azar y se muestran por pantalla
  • 34. Ejercicios Escribir un programa en que se lean 20 líneas de texto, cada línea con un máximo d 80 caracteres. M á i de Mostrar por pantalla el numero d ll l de vocales que tiene cada línea Se requiere evaluar las funciones f(x), g(x) y z(x) para todos los valores de x en el intervalo 0<=x<=3.5 con incrementos de 0.2. escribir un programa que evalué dichas funciones, utilizar un array de punteros a función. Las funciones son las siguientes; F(x)=3*ex-2x G(x)=-x*Sin(x)+1.5 ( ) ( ) Z(x)=x3-2x+1
  • 35. Patrón de prueba de pantalla panorámica (16:9) Prueba de la relación de aspecto (Debe parecer circular) 4x3 16x9