Punteros 1 Lic Nivelacin Gonzalo Pastor Funciones Men

  • Slides: 12
Download presentation
Punteros 1. Lic. Nivelación Gonzalo Pastor Funciones Menú Vectores String 2. Memoria Dinámica Recursividad

Punteros 1. Lic. Nivelación Gonzalo Pastor Funciones Menú Vectores String 2. Memoria Dinámica Recursividad Punteros Pilas Colas Listas Árboles 3. Archivos de texto Archivos Binarios Recomendado: http: //c. conclase. net

Punteros ► Un Puntero es una variable que tiene la dirección de memoria de

Punteros ► Un Puntero es una variable que tiene la dirección de memoria de otra variable. ► Por ejemplo: si la variable c almacena un char y p es un puntero a c, se representaría: r n o G z alo P to as c p Lic ► El & es un operador que devuelve la dirección de memoria de una variable p = &c; ► Se dice que p apunta a c.

Operadores ►& Devuelve la dirección de memoria de una variable Ya era usado en

Operadores ►& Devuelve la dirección de memoria de una variable Ya era usado en scanf() No se usaba con vectores y string porque éstos r o t s son punteros al primer valor. Pa lo a Lic z on G ►* es el operador de indirección o desreferencia, devuelve el contenido de memoria apuntada por un puntero

Ejemplo ► int x = 1, y= 2, z[10]; ► int *ip; ► ip

Ejemplo ► int x = 1, y= 2, z[10]; ► int *ip; ► ip = &x; ► y = *ip; ► *ip = 0; ► ip = &z[0]; ► ip++; //Se declara x, y, z //ip apunta a un entero //ip apunta ax r sto a //y = P 1 o l za n o es ahora 0 //x G Lic //ip apunta al vector z[0] //ip apunta a z[1]

Asignación Dinámica ► Los punteros proporcionan el soporte necesario para el potente sistema de

Asignación Dinámica ► Los punteros proporcionan el soporte necesario para el potente sistema de asignación dinámica de memoria de C. ► La asignación dinámica es la forma en la que un programa puede obtener memoria mientras se está ejecutando. r o ► A las variables globales por ejemplo, se les asigna t s a P memoria en tiempo de compilación. o l za n o ► Durante la ejecución no sec Gpueden añadir variables i L globales o locales, pero existen ocasiones en las que un programa necesita usar cantidades de memoria variables.

NEW - Asigna memoria ► New devuelve una referencia a una posición en memoria

NEW - Asigna memoria ► New devuelve una referencia a una posición en memoria que a guardar el tipo indicado en la sentencia new. ► Tras una llamada fructífera, new devuelve un puntero. Si no hay suficiente memoria librer para satisfacer la petición, se da un fallo de asignación y devuelve un sto a P o l NULL. za ► El Lic n o G siguiente código asigna memoria para guardar datos de una estructura persona: persona *p; p = new persona;

DELETE – Libera memoria ► La instrucción delete es la opuesta a new porque

DELETE – Libera memoria ► La instrucción delete es la opuesta a new porque devuelve al sistema la memoria previamente asignada. ► Una vez que la memoria ha sido liberada, r puede ser reutilizada en unaastoposterior llamada P o l a new. za n o G Lic ► Ejemplo: persona *p; p = new persona; ……. . delete p;

Estructuras Dinámicas de Datos ► Las estructuras básicas disponibles en C y C++ tienen

Estructuras Dinámicas de Datos ► Las estructuras básicas disponibles en C y C++ tienen una importante limitación: no pueden cambiar de tamaño durante la ejecución. ► Los vectores están compuestos por un determinado número de elementos, número que se decide en la fase de diseño, antes de que el programa ejecutable r o t s sea creado. Pa lo a nz o ► En muchas ocasiones se necesitan estructuras que G Lic durante la ejecución del puedan cambiar de tamaño programa. ► Podemos hacer vectores dinámicos, pero una vez creados, su tamaño también será fijo, y para hacer que crezcan o diminuyan de tamaño, deberemos reconstruirlos desde el principio.

Estructuras Dinámicas de Datos ► Las estructuras dinámicas nos permiten crear estructuras de datos

Estructuras Dinámicas de Datos ► Las estructuras dinámicas nos permiten crear estructuras de datos que se adapten a las necesidades reales a las que suelen enfrentarse nuestros programas. ► También nos permitirán crear estructuras de datos muy flexibles, ya sea en cuanto alor orden, la estructura st a interna o las relaciones entre los P elementos que las o al z componen. n o G c i ► Las estructuras de datos Lestán compuestas de otras pequeñas estructuras a las que llamaremos nodos, que agrupan los datos con los que trabajará nuestro programa y además uno o más punteros autoreferenciales, es decir, punteros a objetos del mismo tipo nodo.

Nodos ► Una estructura básica de un nodo para crear listas de datos sería:

Nodos ► Una estructura básica de un nodo para crear listas de datos sería: r ► El z alo to as P campo “siguiente" apunta a un objeto del c i L tipo nodo. ► De este modo, cada nodo puede usarse como un ladrillo para construir listas de datos, y cada uno mantendrá ciertas relaciones con otros nodos. n o G

Nodos ► Para acceder a un nodo de la estructura sólo necesitaremos un puntero

Nodos ► Para acceder a un nodo de la estructura sólo necesitaremos un puntero al primer nodo. ► El nodo anterior se representará así: ► En estos tipos de datos el interés se centra más r o t en la estructura de los datos que en el tipo s a P o l za concreto de informaciónonque almacenan. G c i L ► Dependiendo del número de punteros y de las relaciones entre nodos, podemos distinguir varios tipos de estructuras dinámicas.

Estructuras a Estudiar ► Pilas: conocidas como listas LIFO (Last In, First Out: el

Estructuras a Estudiar ► Pilas: conocidas como listas LIFO (Last In, First Out: el último en entrar es el primero en salir). Los elementos se "amontonan" o apilan, de modo que sólo el elemento que está encima de la pila puede ser leído, y sólo pueden añadirse elementos encima de la pila. ► Colas: conocidas como listas FIFO (First In, First Out: El primero en entrar es el primero en salir). Los elementos se r almacenan en fila, pero sólo pueden sto añadirse por un a extremo y leerse por el otro. zalo P n o G ► Listas: cada elemento sólo dispone de un puntero, que c i L apuntará al siguiente elemento de la lista o valdrá NULL si es el último elemento. Cada dato queda ordenado ► Arboles Binarios: cada elemento dispone de dos punteros, pero las referencias nunca son a elementos anteriores, de modo que la estructura se ramifica y crece igual que un árbol.