5. Parcial 2
Jornalización
1. Estructura de datos internas
2. Arreglos Unidimensionales
3. Arreglos Bidimensionales
4. Arreglos Multidimensionales
5. Creación de tablas virtuales.
6. Uso de funciones implementando arreglos :
métodos de búsqueda y ordenamiento
7. Estructura de Registros
8. Arreglos como miembros de registros
9. Arreglos de registros.
10. Uso de registros implementando funciones
11. Punteros
6. Lenguajes de programación – Punteros
Cuando uno declara una variable inmediatamente el
compilador “RESERVA” memoria principal para ellas, esto
limita a las variables a un espacio estático de memoria
que no puede crecer, es decir, solamente puede usarse la
cantidad de memoria reservada durante la declaración de
las mismas.
int pumita; -32 768 a 32 767
16 bits
9. Lenguajes de programación – Punteros
Existe otro mecanismo para manipular la memoria de
manera dinámica, con esto el programa debe poseer
completo control sobre la gestión de las mismas, cuando
crearlas, usarlas e incluso eliminarlas de memoria.
Esto se logra con los punteros.
10. Lenguajes de programación – Punteros
Un puntero es un tipo simple que
permite a un determinado programa
acceder a posiciones concretas de
memoria, y más específicamente a
determinadas zonas de la memoria
dinámica.
11. Lenguajes de programación – Punteros
Un tipo puntero se define utilizando la
palabra reservada typedef seguida del
tipo de la variable dinámica apuntada,
un asterisco para indicar que es un
puntero a una variable de dicho tipo, y
el identificador que denomina al tipo.
Por ejemplo:
13. Lenguajes de programación – Punteros
Gestión de Memoria Dinámica
La memoria dinámica la debe gestionar el propio programador, por
lo que cuando necesite crear una determinada variable dinámica,
debe solicitar memoria dinámica con el operador new seguido por
el tipo de la variable dinámica a crear. Este operador (new) realiza
dos acciones principales, primero aloja (reserva) espacio en
memoria dinámica para albergar a la variable, y después crea
(invocando al constructor especificado) el contenido de la variable
dinámica. Finalmente, a la variable ptr se le asigna el valor del
puntero (una dirección de memoria) que apunta a la variable
dinámica creada por el operador new.
14. Lenguajes de programación – Punteros
CONSTRUCTORES
Gestión de Memoria Dinámica
Por ejemplo, para crear una variable dinámica del tipo Persona
definido anteriormente utilizando el constructor por defecto de
dicho tipo:
Nombre
Teléfono
Edad
Memoria que se creará
cuando asigne valores
15. Lenguajes de programación – Punteros
DESTRUCTORES/RECOLECTORES DE BASURA
Gestión de Memoria Dinámica
Posteriormente, tras manipular adecuadamente, según las
características del programa, la memoria dinámica alojada,
llegará un momento en que dicha variable dinámica ya no sea
necesaria, y su tiempo de vida llegue a su fin. En este caso, el
programador debe liberar explícitamente dicha variable
dinámica mediante el operador delete de la siguiente forma:
16. Lenguajes de programación – Punteros
DESTRUCTORES/RECOLECTORES DE BASURA
Gestión de Memoria Dinámica
17. Lenguajes de programación – Punteros
DESREFEENCIAR UN PUNTERO
Para acceder a una variable dinámica apuntada por una variable de tipo
puntero, se utiliza el operador unario asterisco (*) precediendo al nombre
de la variable de tipo puntero a través de la cual es apuntada. Por
ejemplo, si ptr es una variable local de tipo puntero que apunta a una
variable dinámica de tipo Persona, entonces *ptr es la variable dinámica
apuntada, y se trata de igual forma que cualquier otra variable de tipo
Persona.
19. Lenguajes de programación – Punteros
DESREFEENCIAR UN PUNTERO
Nótese que el uso de los paréntesis es obligatorio debido a
que el operador punto (.) tiene mayor precedencia que el
operador de desreferenciación (*). Por ello, en el caso de
acceder a los campos de un registro en memoria dinámica a
través de una variable de tipo puntero, es más adecuado
utilizar el operador de desreferenciación (->).
21. Lenguajes de programación – Punteros
PUNTERO
Un PUNTERO puede APUNTAR a NULL, esto
significa que puede no estar referenciado a
un espacio de memoria aún pero si existir.
22. Lenguajes de programación – Punteros
LISTAS ENLAZADAS
Una de las principales aplicaciones de la Memoria Dinámica es el uso de
estructuras enlazadas, de tal forma que un campo o atributo de la variable
dinámica es a su vez también de tipo puntero, por lo que puede apuntar a
otra variable dinámica que también tenga un campo o atributo de tipo
puntero, el cual puede volver a apuntar a otra variable dinámica, y así
sucesivamente, tantas veces como sea necesario, hasta que un puntero
con el valor NULL indique el final de la estructura enlazada (lista enlazada).
24. Lenguajes de programación – Punteros
LISTAS ENLAZADAS
Podemos usar listas enlazadas para optimizar estructuras
de datos como:
1. Pilas.
2. Colas.
3. Árboles.
4. Grafos.
25. Lenguajes de programación – Punteros
HAY QUE DEFINIR CADA UNA DE ELLAS
LISTAS ENLAZADAS
Podemos usar listas enlazadas para optimizar estructuras
de datos como:
1. Pilas.
2. Colas.
3. Árboles.
4. Grafos.