La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Punteros Recomendado: 1. Nivelación Funciones

Presentaciones similares


Presentación del tema: "Punteros Recomendado: 1. Nivelación Funciones"— Transcripción de la presentación:

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

2 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: El & es un operador que devuelve la dirección de memoria de una variable p = &c; Se dice que p apunta a c. c p

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

4 Ejemplo //Se declara x, y, z int x = 1, y= 2, z[10];
//ip apunta a un entero //ip apunta a x //y = 1 //x es ahora 0 //ip apunta al vector z[0] //ip apunta a z[1] int x = 1, y= 2, z[10]; int *ip; ip = &x; y = *ip; *ip = 0; ip = &z[0]; ip++;

5 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. A las variables globales por ejemplo, se les asigna memoria en tiempo de compilación. Durante la ejecución no se pueden añadir variables globales o locales, pero existen ocasiones en las que un programa necesita usar cantidades de memoria variables.

6 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 libre para satisfacer la petición, se da un fallo de asignación y devuelve un NULL. El siguiente código asigna memoria para guardar datos de una estructura persona: persona *p; p = new persona;

7 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, puede ser reutilizada en una posterior llamada a new. Ejemplo: persona *p; p = new persona; …….. delete p;

8 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 sea creado. En muchas ocasiones se necesitan estructuras que puedan cambiar de tamaño durante la ejecución del 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.

9 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 al orden, la estructura interna o las relaciones entre los elementos que las componen. Las estructuras de datos está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.

10 Nodos Una estructura básica de un nodo para crear listas de datos sería: El campo “siguiente" apunta a un objeto del 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.

11 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 en la estructura de los datos que en el tipo concreto de información que almacenan. Dependiendo del número de punteros y de las relaciones entre nodos, podemos distinguir varios tipos de estructuras dinámicas.

12 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 almacenan en fila, pero sólo pueden añadirse por un extremo y leerse por el otro. Listas: cada elemento sólo dispone de un puntero, que 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.


Descargar ppt "Punteros Recomendado: 1. Nivelación Funciones"

Presentaciones similares


Anuncios Google