Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Clase11 - Punteros
Clase11 - Punteros
Programas
1
Clase
Clase 11
9
CADP – Temas de la clase de hoy
Ejercicios
Clase 11 2
CADP – Cómo es la memoria de la CPU?
Otros datos
Memoria
Dinámica
C P U
Clase 3
Clase 11
9
CADP – Cómo es la memoria de la CPU?
Tamaño de las variables:
Char = 1byte
Integer = 4 bytes
Real = 8 bytes
Boolean = 1 byte
String = cantidad de caracteres + 1
Registro = suma de lo que
Memoria ocupa c/ campo
Estática Puntero = 4 bytes
1G = 1073741824 bytes
Memoria
Dinámica
La variable pun
Memoria num: 536 contiene una dirección
Estática (FAFB)
pun: FAFB
En la
Memoria FAFA FAFB s dirección
e
Dinámica ‘a’ FAFB almacen encuentra
ado el v
C P U al o r 7
Clase
Clase 11
9
CADP – Tipo de dato - Puntero
Características:
Es un tipo de dato simple que contiene la
dirección donde se encuentra almacenado el
Puntero dato real.
Pueden apuntar solamente a direcciones
almacenadas en memoria dinámica (heap).
TYPE
identificador= ^TipoVariableApuntada;
e r c u a l q u i e r a d e
Puede s u e
i po s d e d a to s q
los t l
v i st o h a s t a e
hemos
momento
Ejemplos?
Clase 9
Clase 11
9
CADP – Tipo de dato – Puntero - Declaración
Program uno;
TYPE
punteroAEntero = ^integer;
VAR
pun:PunteroAEntero;
Ejemplos?
1
Clase
Clase 11
9 0
CADP – Tipo de dato – Puntero - Declaración
Program uno;
Type
TipoCadena = array [1..10] of char;
Cuánto ocupa
PunCadena = ^TipoCadena;
ca da va ria b le?
PunReal = ^real;
PunString = ^string; var
pReal: PunReal;
Datos = record t: PunString;
nombre: string[10]; r: PunString;
apellido: string[10]; puntero: PunCadena;
altura: real; p,q: PunDatos;
end;
PunDatos = ^datos; begin
....
end. 1
Clase
Clase 11
9 1
CADP – Tipo de dato – Puntero - Memoria
Begin p: FAFB
????
new (p); FAFA
…
dispose(p);
???? FAFB
End. 1
Clase
Clase 11
9 C P U 5
CADP – Tipo de dato – Puntero – Operaciones - Eliminación
Program uno;
Type
puntero = ^integer;
Var
p:puntero;
Begin p: FAFB
????
new (p); FAFA
… n i l
c i
n e?a ???? FAFB
p:= nil;
f e r e s
End.
i
D disp o
Clase
Clase 11
9
y C P U
1
5
CADP – Tipo de dato – Puntero – Operaciones - Asignación
Gráficamente?
Libera la conexión que existe entre Libera la conexión que existe entre
la variable y la posición de la variable y la posición de
memoria. memoria.
DISPOSE NIL
Memoria p=FFAA
p?? Memoria p=nil
p=FFAA
33 FFAA 33 FFAA
DISPOSE (P) P:= nil
1
Clase
Clase 11
9 8
CADP – Tipo de dato – Puntero – Operaciones - Asignación
Begin p: ????
FAFB
new(p); FAFA
p^:= 123; 123
???? FAFB
Las operaciones permitidas
para el contenido depende del
2
Clase
Clase 11
9 tipo que se apunta C P U 1
CADP – Tipo de dato – Puntero – Operaciones - Ejercicios
Begin
Cómo queda la new (p); p^:= 14;
memoria? write (p^);
Qué imprime? q:=p; q^:= q^*10;
Begin write (p^, q^);
Begin dispose (q);
new (p);
new (p); write (p^, q^);
new(q);
new(q); End.
p:= q; Begin
q^:= -10;
q:=10; new (p); p^:= 14;
write(q^); write (p^);
write(q^); q:=p; q^:= q^*10;
write(p^);
write(p^); write (p^, q^);
End. q:=nil;
End.
write (p^, q^); 2
Clase
Clase 11
9 2
CADP – Tipo de dato – Puntero – Operaciones - Ejercicios
Operaciones:
if (p = nil) then, compara si el puntero p no
Repasamos tiene dirección asignada.
2
Clase
Clase 11
9 3
CADP – Tipo de dato – Puntero – Operaciones - Ejercicios
Operaciones:
No se puede hacer read (p), si p es una
variable de tipo puntero.
Repasamos
No se puede hacer write (p), si p es una
variable de tipo puntero.
Clase
4 Bytes de memoria estática + 25 Bytes de memoria dinámica
Clase 11
9
2
6
CADP – Tipo de dato – Puntero – Operaciones - Memoria
Clase
Clase 11
9
Lo mismo que antes (29), ya que sólo modifica el contenido 2
7
CADP – Tipo de dato – Puntero – Operaciones - Memoria
Cuánto
Type ocupa p1?
cadena = string [255];
pcadena = ^ string [255]; Cuánto
ocupa p
pun1 = array[1…3000] of cadena; a?
pun2 = array[1..3000] of pcadena;
Type
cadena = string [255];
pcadena = ^ string [255];
pun1 = array[1…3000] of cadena;
pun2 = array[1..3000] of pcadena;
Var
p1: pun1; p1 = 3000 * (255 + 1) = 768000
pa: pun2; pa = 3000 * (4) = 12000
2
Clase
Clase 11
9 9
CADP – Tipo de dato – Puntero – Operaciones - Memoria
Type
cadena = string [255]; Begin
pcadena = ^ string [255]; for i := 1 to 3000 do
pun1 = array[1…3000] of cadena; begin
pun2 = array[1..3000] of pcadena; read (x);
p1[i]:= x;
Var end;
p1: pun1; End.
pa: pun2; Begin
x:cadena; for i := 1 to 3000 do
i:integer; read (p1[i]);
p1 = 3000 * (255 + 1) = 768000End.
3
Clase
Clase 11
9 0
CADP – Tipo de dato – Puntero – Operaciones - Memoria
Cuánta memoria ocupan las variables ?
^string ^string ^string ^string ^string ^string ^string
Begin
Type for i := 1 to 3000 do
cadena = string [255]; begin
pcadena = ^ string [255]; read (x);
pun1 = array[1…3000] of cadena; new (pa[i]);
pun2 = array[1..3000] of pcadena; pa[i]^:= x;
end;
Var End.
p1: pun1; Begin
pa: pun2; for i := 1 to 3000 do
x:cadena; new(pa[i])
i:integer; read (pa[i]^);
pa = 3000 * (4 + 256) = 780000End.
3
Clase
Clase 11
9 1
CADP – Tipo de dato – Puntero – Operaciones - Memoria
Siempre pa ocupa
más memoria que p1?
3
Clase
Clase 11
9 2