La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Computación II Capitulo VII Punteros. Presentación de la unidad Objetivos: –Ser capaces de utilizar punteros. –Comprender las relaciones entre punteros,

Presentaciones similares


Presentación del tema: "Computación II Capitulo VII Punteros. Presentación de la unidad Objetivos: –Ser capaces de utilizar punteros. –Comprender las relaciones entre punteros,"— Transcripción de la presentación:

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: * ; 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 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. Concepto de puntero; declaración e inicialización xPtrx 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 Representación en memoria: 500000 600000 Operadores de punteros xPtr x 7 600000 xPtr 7 x

8 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. Operadores de punteros

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: v[0]v[1]v[2]v[3] 3000300430083012 vPtr

12 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; Aritmética de punteros 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”}; ‘c’‘o’‘r’‘a’‘z’‘o’‘n’‘e’‘s’‘\0’ ‘d’‘i’‘a’‘m’‘a’‘n’‘t’‘e’‘s’‘\0’ ‘e’‘s’‘p’‘a’‘d’‘a’‘s’‘\0’ ‘t’‘r’‘e’‘b’‘o’‘l’‘e’‘s’‘\0’ suit[0] suit[1] suit[2] suit[3]

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) ( ) 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;


Descargar ppt "Computación II Capitulo VII Punteros. Presentación de la unidad Objetivos: –Ser capaces de utilizar punteros. –Comprender las relaciones entre punteros,"

Presentaciones similares


Anuncios Google