Está en la página 1de 9

ALOCACIÓN DINÁMICA

PUNTEROS

EXPLICACIÓN PRÁCTICA 6

CADP 2018

Facultad de Informática -
VARIABLES ESTÁTICAS

Las variables estáticas ocupan un espacio de memoria que se reserva al


declararlas y que no cambia durante la ejecución del programa.

Memoria RAM

Pila
o Stack
Variables
VARIABLES DINÁMICAS

ac e n a la direcció n en
:
Variable Puntero
alm
ria b le variable
(llamad a
d e ot ra va
memoria
dinámica).

Ejemplo Memoria

variableApuntada Memoria Dinámica


zzz dato
(heap)
Variables dinámicas

variablePuntero Memoria estática


(stack)
zzz Variables estáticas
USO DE PUNTEROS

Declaración (ejemplo) Valores posibles de un puntero


TYPE • NIL
PtroEntero = ^ integer
• Dirección de memoria dinámica
VAR
pun, otropun: PtroEntero

¿Qué se puede hacer con punteros?


• Reservar memoria dinámica (new)
• Liberar memoria dinámica (dispose)
• Asignar punteros
• Comparar punteros
• Acceder al dato apuntado por el puntero (^)
USO DE PUNTEROS
Ejemplo
m o ria pero es inaccesible
a e n m e
Program ejemplo; El dato qued
Type Memoria
Ptro= ^integer;
Var XXXX 44
p1, p2: Ptro; Memoria
Begin Dinámica ZZZZ ????
23
new (p1); (heap)
p1^ := 23;
new (p2); p1 ZZZZ Variables
p2^ := 44; PP
Pila p2 XXXX
ZZZZ
p2 := p1;
write (p2^);
dispose (p2);
write(p1^); Im
End. prime
23
ERROR
USO DE PUNTEROS
Ejemplo
2Program ejemplo;
Type
casa = record
Memoria
met_cua: real;
cant_hab: integer; Memoria met_cua 125.50
ZZZZ ????
end; Dinámica Ca 5
6
punt_casa = ^casa; (Heap) nt_hab
Var
p1, p2: punt_casa; ZZZZ
p1
Begin Variables
P p2 ZZZZ
new (p1); PP
p1^.met_cua := 125.50; ila
p1^.cant_hab := 5;
p2:= p1;
p2^.cant_hab := 6; Im
write (p1^.cant_hab); prime
dispose (p2); 6
write(p1^.met_cua); ERROR
End.
USO DE PUNTEROS
Ejemplo 3: Punteros como parámetros
p1 recibe una copia de la dirección de p. Si
modifico el dato apuntado por p1, el llamador
Program ejemplo;
Type
verá el cambio.
punt = ^integer;
p1: FFFF
Procedure suma (p1:punt); Variables Estáticas
Begin {procedure suma}
p1^ := p1^ + 1;
End;
p: BASURA
FFFF Variables
Var Estáticas
p: punt; {Prog Ppal}

Begin
new (p);
24
BASURA
23
p^ := 23;
suma(p); Variables Dinámicas
write(p^);
End. PRIME 24
IM
USO DE PUNTEROS
Ejemplo 4: Punteros como parámetros
Program ejemplo; p1 recibe una recibe una copia de la dirección de p.
Type Si modifico la dirección p1, p en el programa ppal
punt = ^integer; tiene la misma dirección que tenía antes de la llamada.
Procedure suma (p1:punt);
Begin p1: FAAF
FFFF Variables
p1^ := p1^ + 1; Estáticas
new(p1); {suma}
End; Q u é oc urre al
¿ p1) por
ar n e w (
reemplaz e(p1)? p: BASURA
FFFF Variables
Var dispos Estáticas
p: punt;
{Prog Ppal}
Begin
new (p); El dato queda en
p^ := 23; memoria pero
24
BASURA
23
suma(p); es inaccesible Variables
write(p^); Dinámicas
E 24
End. IMPRIM
BASURA
USO DE PUNTEROS
Ejemplo 5: Punteros como parámetros
p1 recibe la referencia de p. Si modifico la dirección
Program ejemplo; p1, estoy modificando la dirección de p en el programa
Type ppal.
punt = ^integer;

Procedure suma (VAR p1:punt);


Begin p1: Variables
p1^ := p1^ + 1; Estáticas
new(p1); {suma}
p1^:= 44;
End;
p: FF11
BASURA
FFFF Variables
Var Estáticas
p: punt; {Prog Ppal}
El dato queda en
Begin memoria pero
new (p); es inaccesible 24
BASURA
23
p^ := 23; Variables
suma(p); Dinámicas
write(p^);
End. E 44 44
BASURA
IMPRIM

También podría gustarte