1 / 15

Computación II

Computación II. Capitulo VII Punteros. Presentación de la unidad. Objetivos: Ser capaces de utilizar punteros. Comprender las relaciones entre punteros, arreglos y cadenas. Comprender la utilización de punteros a funciones. Ser capaces de declarar y utilizar arreglos de cadenas.

giona
Download Presentation

Computación II

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Computación II Capitulo VII Punteros

  2. Presentación de la unidad • Objetivos: • Ser capaces de utilizar punteros. • Comprender las relaciones entre punteros, arreglos y cadenas. • Comprender la utilización de punteros a funciones. • Ser capaces de declarar y utilizar arreglos de cadenas.

  3. Presentación de la unidad • Contenidos: • Concepto de punteros; declaración e inicialización. • Operadores de punteros. • Relaciones entre punteros y arreglos. • Aritmética de punteros. • Arreglos de punteros. • Punteros a funciones. • Punteros a estructuras.

  4. Concepto de puntero; declaración e inicialización • Los punteros son variables que contienen direcciones de memoria como sus valores. • Sintaxis: <tipo_de_dato>* <nombre_puntero>; • El tipo de dato de una variable de tipo puntero se corresponde con el tipo de dato de la variable a la que apunta. • Los punteros pueden ser inicializados cuando son declarados o en un enunciado de asignación. • Pueden ser inicializados a 0, NULL o a una dirección; un puntero con un valor NULL apunta a nada.

  5. Concepto de puntero; declaración e inicialización • Inicialización • Estática: • Asignar una dirección de memoria a un puntero utilizando el operador de dirección (&). • Ejemplo: int x = 0; int *xPtr = &x; • Dinámica: • Asignación dinámica de memoria. Se utiliza el operador new(), de reserva de memoria; y el operador delete(), para la liberación de la memoria reservada. xPtr x 0

  6. Operadores de punteros • &: operador de dirección; regresa la dirección de su operando. • *: operador de indirección; regresa el valor del objeto hacia el cual se apunta. • Ejemplo: int x = 7; int *xPtr = &x; cout<<"x="<<x<<endl; cout<<"xPtr="<<xPtr<<endl; cout<<"*xPtr="<<*xPtr<<endl;

  7. Operadores de punteros • Representación en memoria: 500000 600000 xPtr x 600000 7 xPtr x 7

  8. Operadores de punteros • Un puntero puede apuntar a otra variable de tipo puntero. • Ejemplo: int x = 7; int *xPtr = &x; int **xPtr1 = *xPtr; cout<<"x="<<x<<endl; cout<<"xPtr="<<xPtr<<endl; cout<<"*xPtr="<<*xPtr<<endl; cout<<"**xPtr="<<**xPtr<<endl; • Este concepto se utiliza para problemas largos y complejos.

  9. Relaciones entre punteros y arreglos • Los punteros y los arreglos están relacionados y pueden ser utilizados “casi” en forma indistinta. • El nombre de un arreglo (sin subíndice) puede ser considerado un puntero constante. int y[4]={0,5,7,15}; int *yPtr; yPtr = y  yPtr =&y[0] • El elemento del arreglo y[3] puede ser referenciado de las siguientes formas: • Notación puntero/desplazamiento: y[3] == *(yPtr + 3) ; // 3 es el desplazamiento del puntero y[3] == *(y + 3) ; • Notación puntero /subíndice: y[3] == yPtr[1];

  10. Aritmética de punteros • Los punteros son operandos validos en expresiones aritméticas, en expresiones de asignación y de comparación. • Operaciones validas: • Incremento (++) • Decremento(--) • Añadir un entero a un puntero (+ ó +=) • Restar un entero a un puntero (+ ó +=) • Un puntero puede ser sustraído o restado a otro.

  11. Aritmética de punteros • Ejemplo para una maquina con enteros de 4 bytes. int v[4]; int *vPtr = &v[0]; Posiciones en memoria: 3000 3004 3008 3012 vPtr

  12. Aritmética de punteros • Cuando se añade o se resta un entero al puntero, el puntero se incrementa o decrementa el valor de dicho entero multiplicado por el tamaño del objeto al cual apunta. vPtr+=2 (3000+2*4) = 3008 • Las variables de tipo puntero pueden ser restadas la una a la otra: int V[4]; int *vPtr = v; int *vPtr1 = &v[2]; x = vPtr1 – vPtr; X es el numero de elementos del arreglo v, desde vPtr hasta vPtr1; en este caso 2;

  13. Arreglo de punteros • Los arreglos pueden contener punteros, por ejemplo, cadena de caracteres. • Cada entrada en el arreglo es una cadena; en C++ una cadena es de hecho un puntero al primer elemento. char *suit[4]={“Corazones”, “Diamantes”,”Espadas”,”Treboles”};

  14. Punteros a funciones • Un puntero a función contiene la dirección de la función en memoria. • Sintaxis: tipo_de_retorno (*puntero_funcion) (<lista_de_parametros>) • Los punteros a funciones pueden ser pasados a funciones, regresados a funciones, almacenados en arreglos y asignados a otros punteros. • Ejemplo: La función ordenamientoBurbuja ha sido modificada para que reciba un puntero a la función ascendente o descendente como argumento. El programa solicita al usuario que elija como va ser ordenado el arreglo. void swap(int *, int *); int ascendente(const int, const int); int descendente(const int, const int); void ordenamientoBurbuja(int *, int , int (*)(int, int));

  15. Puntero a estructuras • Se puede declarar un puntero a una estructura tal y como se declara un puntero a otro objeto. • Cuando se referencia una estructura utilizando un puntero se utiliza el operador flecha ->, para acceder a un miembro de ella. • Ejemplo: struct fecha{ int dia, mes, anyo; }; struct datos{ char *nombre; struct fecha *fec; } ; struct datos dato; dato.nombre =“Carolina”; dato.fec->dia = 2; dato.fec->mes=10; dato.fec->anyo = 2008;

More Related