Punteros 1 Lic Nivelacin Gonzalo Pastor Funciones Men
- Slides: 12
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 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 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 = &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 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 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 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 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 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: 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 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 ú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.