![Page 1: MEMORIA DINÁMICA: PUNTEROSjvalvarez/docencia/pII antiguo/tema2.pdf · MEMORIA DINÁMICA y PUNTEROS •Introducción •Conceptos básicos •Definición y declaración de punteros](https://reader033.vdocuments.co/reader033/viewer/2022053000/5f04cf507e708231d40fd154/html5/thumbnails/1.jpg)
TEMA 2:MEMORIA DINÁMICA
yPUNTEROS
Departamento de InformáticaUniversidad de Valladolid
Campus de Segovia______________________
Prof. José Vicente Álvarez Bravo
![Page 2: MEMORIA DINÁMICA: PUNTEROSjvalvarez/docencia/pII antiguo/tema2.pdf · MEMORIA DINÁMICA y PUNTEROS •Introducción •Conceptos básicos •Definición y declaración de punteros](https://reader033.vdocuments.co/reader033/viewer/2022053000/5f04cf507e708231d40fd154/html5/thumbnails/2.jpg)
MEMORIA DINÁMICA yPUNTEROS
•Introducción•Conceptos básicos•Definición y declaración de punteros•Creación y destrucción de variablesdinámicas.•Operaciones básicas con datosreferenciados•Operaciones básicas con punteros•El valor nil•Aplicaciones no recursivas de lospunteros
![Page 3: MEMORIA DINÁMICA: PUNTEROSjvalvarez/docencia/pII antiguo/tema2.pdf · MEMORIA DINÁMICA y PUNTEROS •Introducción •Conceptos básicos •Definición y declaración de punteros](https://reader033.vdocuments.co/reader033/viewer/2022053000/5f04cf507e708231d40fd154/html5/thumbnails/3.jpg)
INTRODUCCIÓN
• Las estructuras de datos hasta ahora vistasse almacenan estáticamente en la memoriafísica del ordenador.
– El espacio de memoria se reserva con anticipación yno cambia durante la ejecución del programa*.
– Esto permite una comprobación de tipos en tiempode compilación.
• Inconvenientes de la configuraciónestática:
– Su rigidez, ya que estas estructuras no puedencrecer o menguar durante la ejecución delprograma.
* Esto no implica que la cantidad de memoria de ejecución de un programa seaconstante, ya que dependerá del numero de subprogramas recursivos invocadospor el programa.
![Page 4: MEMORIA DINÁMICA: PUNTEROSjvalvarez/docencia/pII antiguo/tema2.pdf · MEMORIA DINÁMICA y PUNTEROS •Introducción •Conceptos básicos •Definición y declaración de punteros](https://reader033.vdocuments.co/reader033/viewer/2022053000/5f04cf507e708231d40fd154/html5/thumbnails/4.jpg)
INTRODUCCIÓN
• La definición y manipulación de estosobjetos se realiza en Pascal mediante lospunteros (variables cuyo contenido sonposiciones de memoria).
• Ventaja frente a las estructuras estática:– La flexibilidad que poseen las estructuras
dinámicas en cuanto a las formas que puedenadoptar: árboles, listas, redes, etc...
• Inconvenientes:– Alliasing: Doble direccionamiento sobre una
misma variable lo que implica efectos laterales.
– Gestión de la memoria: Su uso requiere unaespecial atención de la memoria disponible asícomo de la que ya no queramos utilizar.
![Page 5: MEMORIA DINÁMICA: PUNTEROSjvalvarez/docencia/pII antiguo/tema2.pdf · MEMORIA DINÁMICA y PUNTEROS •Introducción •Conceptos básicos •Definición y declaración de punteros](https://reader033.vdocuments.co/reader033/viewer/2022053000/5f04cf507e708231d40fd154/html5/thumbnails/5.jpg)
CONCEPTOS BÁSICOS
• Un puntero es una variable que contienela dirección de memoria donde seencuentra almacenado un dato.
• Una variable referenciada o datoapuntado es el dato cuya posición enmemoria está contenida en un determinadopuntero (variable dinámica).
DATO
1365 20560123 4567
1365 2056
Dirección de memoria Memoria
puntero
Variablereferenciada
![Page 6: MEMORIA DINÁMICA: PUNTEROSjvalvarez/docencia/pII antiguo/tema2.pdf · MEMORIA DINÁMICA y PUNTEROS •Introducción •Conceptos básicos •Definición y declaración de punteros](https://reader033.vdocuments.co/reader033/viewer/2022053000/5f04cf507e708231d40fd154/html5/thumbnails/6.jpg)
REPRESENTACIÓN GRÁFICA
DATO
VariablereferenciadaPuntero
![Page 7: MEMORIA DINÁMICA: PUNTEROSjvalvarez/docencia/pII antiguo/tema2.pdf · MEMORIA DINÁMICA y PUNTEROS •Introducción •Conceptos básicos •Definición y declaración de punteros](https://reader033.vdocuments.co/reader033/viewer/2022053000/5f04cf507e708231d40fd154/html5/thumbnails/7.jpg)
DEFINICIÓN YDECLARACIÓN DE
PUNTEROS
• Para poder usar una variable puntero esnecesario:
– Definir el tipo de dato (o estructura) al que seapunta. (esta declaración se realiza dentro dela sección TYPE).
– Declarar las variables punteros que seannecesarias (esta declaración se realiza dentrode la sección VAR).
– En Pascal un puntero sólo puede señalara objetos de un mismo tipo, elestablecido en la declaración.
![Page 8: MEMORIA DINÁMICA: PUNTEROSjvalvarez/docencia/pII antiguo/tema2.pdf · MEMORIA DINÁMICA y PUNTEROS •Introducción •Conceptos básicos •Definición y declaración de punteros](https://reader033.vdocuments.co/reader033/viewer/2022053000/5f04cf507e708231d40fd154/html5/thumbnails/8.jpg)
DIAGRAMA SINTÁCTICO
TIPO^
Ejemplo I:
TYPEtapunchar=^char;
VARapcar:=tapunchar;
Ejemplo II:
TYPEtApNodo=^tNodo;tNodo=record
info:.......Sig:tApNodo
end;VAR
ApNodo:=tApNodo;
![Page 9: MEMORIA DINÁMICA: PUNTEROSjvalvarez/docencia/pII antiguo/tema2.pdf · MEMORIA DINÁMICA y PUNTEROS •Introducción •Conceptos básicos •Definición y declaración de punteros](https://reader033.vdocuments.co/reader033/viewer/2022053000/5f04cf507e708231d40fd154/html5/thumbnails/9.jpg)
ALGUNAS OBSERVACIONESAL RESPECTO
• Una variable de tipo puntero ocupa unacantidad de memoria fija, independientedel tipo de dato al que apunta.
• Un dato referenciado, como el del ejemplo,no posee existencia inicial, o lo que es lomismo no existe inicialmente espacioreservado en memoria para el.
![Page 10: MEMORIA DINÁMICA: PUNTEROSjvalvarez/docencia/pII antiguo/tema2.pdf · MEMORIA DINÁMICA y PUNTEROS •Introducción •Conceptos básicos •Definición y declaración de punteros](https://reader033.vdocuments.co/reader033/viewer/2022053000/5f04cf507e708231d40fd154/html5/thumbnails/10.jpg)
LA NECESIDAD DE UTILIZARPUNTEROS
• Para poder emplear variables dinámicas esnecesario emplear un tipo de dato quepermita referenciar nuevas posiciones dememoria que no han sido declaradas apriori y que se van a crear y destruir entiempo de ejecución.
• Estas variables son los punteros que enPascal es un tipo de dato simple.
![Page 11: MEMORIA DINÁMICA: PUNTEROSjvalvarez/docencia/pII antiguo/tema2.pdf · MEMORIA DINÁMICA y PUNTEROS •Introducción •Conceptos básicos •Definición y declaración de punteros](https://reader033.vdocuments.co/reader033/viewer/2022053000/5f04cf507e708231d40fd154/html5/thumbnails/11.jpg)
CREACIÓN Y DESTRUCCIÓNDE VARIABLES DINÁMICAS
• Las variables dinámicas son por definiciónaquellas que se crean cuando se necesitan yse destruyen cuando ya han cumplido consu cometido.
• En pascal la creación y destrucción devariables dinámicas se realiza mediante lossiguientes procedimientos:
– New(puntero)
– Dispose(puntero)
![Page 12: MEMORIA DINÁMICA: PUNTEROSjvalvarez/docencia/pII antiguo/tema2.pdf · MEMORIA DINÁMICA y PUNTEROS •Introducción •Conceptos básicos •Definición y declaración de punteros](https://reader033.vdocuments.co/reader033/viewer/2022053000/5f04cf507e708231d40fd154/html5/thumbnails/12.jpg)
CREACIÓN DE UNAVARIABLE DINÁMICA
• New(puntero)
– Reserva la memoria necesaria para un dato deltipo apropiado.
– Coloca la dirección de memoria de esta nuevavariable en el puntero.
• Gráficamente esto se representa:
???????
![Page 13: MEMORIA DINÁMICA: PUNTEROSjvalvarez/docencia/pII antiguo/tema2.pdf · MEMORIA DINÁMICA y PUNTEROS •Introducción •Conceptos básicos •Definición y declaración de punteros](https://reader033.vdocuments.co/reader033/viewer/2022053000/5f04cf507e708231d40fd154/html5/thumbnails/13.jpg)
DESTRUCCIÓN DE UNAVARIABLE DINÁMICA
• Dispose(puntero)
– Libera la memoria asociada a la variablereferida (dejándola libre para otros fines).
– Deja indefinido el valor del puntero.
• Gráficamente esto se representa:
?????????
![Page 14: MEMORIA DINÁMICA: PUNTEROSjvalvarez/docencia/pII antiguo/tema2.pdf · MEMORIA DINÁMICA y PUNTEROS •Introducción •Conceptos básicos •Definición y declaración de punteros](https://reader033.vdocuments.co/reader033/viewer/2022053000/5f04cf507e708231d40fd154/html5/thumbnails/14.jpg)
OPERACIONES BÁSICAS CONVARIABLES
REFERENCIADAS
• El contenido de la variable referenciadapor el puntero se denota:
puntero^
• Las operaciones permitidas para esta nuevavariables son:
– Asignación– Lectura– Escritura– Todas las operaciones legales que se puedan
realizar con dicho tipo.
![Page 15: MEMORIA DINÁMICA: PUNTEROSjvalvarez/docencia/pII antiguo/tema2.pdf · MEMORIA DINÁMICA y PUNTEROS •Introducción •Conceptos básicos •Definición y declaración de punteros](https://reader033.vdocuments.co/reader033/viewer/2022053000/5f04cf507e708231d40fd154/html5/thumbnails/15.jpg)
EJEMPLO I...........TYPE
tApcar=^char;VAR
Apcar:tApcar;
BEGIN.........New(Apcar);Readln(Apcar^); {Por ejemplo ‘B’}Apcar^:=Pred(Apcar^);Writeln(Apcar^);..........END.
‘A’
Apcar
Apcar^
![Page 16: MEMORIA DINÁMICA: PUNTEROSjvalvarez/docencia/pII antiguo/tema2.pdf · MEMORIA DINÁMICA y PUNTEROS •Introducción •Conceptos básicos •Definición y declaración de punteros](https://reader033.vdocuments.co/reader033/viewer/2022053000/5f04cf507e708231d40fd154/html5/thumbnails/16.jpg)
EJEMPLO II...........TYPE
tApnum=^integer;VAR
Apnum1, Apnum2:tApnum;BEGIN.........New(Apnum1); New(Apnum2);Apnum1^:=2; Apnum2^:=4;Apnum2^:=Apnum1^+Apnum2^;Apnum1^:=Apnum2^ DIV 2;..........END.
3
Apnum1
6
Apnum2
![Page 17: MEMORIA DINÁMICA: PUNTEROSjvalvarez/docencia/pII antiguo/tema2.pdf · MEMORIA DINÁMICA y PUNTEROS •Introducción •Conceptos básicos •Definición y declaración de punteros](https://reader033.vdocuments.co/reader033/viewer/2022053000/5f04cf507e708231d40fd154/html5/thumbnails/17.jpg)
EJEMPLO III
...........TYPE
tVector10=array[1..10] of real;tApnumero=^integer;tApvector=^tvector10;
VARApnum1, Apnum2: tApnum;Apvect: tApvector10;i: integer;
BEGIN.........
New(Apnum1); New(Apnum2); New(apvect);Apnum1^:=45; Apnum2^:=30;Apvect^[1]=2;for i:=2 to 10 do
Apvect^[i]:=Apvect^[i-1] * 2;..........END.
![Page 18: MEMORIA DINÁMICA: PUNTEROSjvalvarez/docencia/pII antiguo/tema2.pdf · MEMORIA DINÁMICA y PUNTEROS •Introducción •Conceptos básicos •Definición y declaración de punteros](https://reader033.vdocuments.co/reader033/viewer/2022053000/5f04cf507e708231d40fd154/html5/thumbnails/18.jpg)
EJEMPLO III
• Dejando el estado de la memoria de lasiguiente forma:
3
Apnum1
6
Apnum2
2,0
Apvect
4,0 1024,0
![Page 19: MEMORIA DINÁMICA: PUNTEROSjvalvarez/docencia/pII antiguo/tema2.pdf · MEMORIA DINÁMICA y PUNTEROS •Introducción •Conceptos básicos •Definición y declaración de punteros](https://reader033.vdocuments.co/reader033/viewer/2022053000/5f04cf507e708231d40fd154/html5/thumbnails/19.jpg)
OPERACIONES BÁSICAS CONPUNTEROS
• Las únicas operaciones válidas son:
– La comparación (se comparan las direcciones,no los contenidos de los datos apuntados).
Apnum1=Apnum2
– La asignación (se asignan las direcciones entresí, no los contenidos de los datos apuntados).
Apnum1:=Apnum2
![Page 20: MEMORIA DINÁMICA: PUNTEROSjvalvarez/docencia/pII antiguo/tema2.pdf · MEMORIA DINÁMICA y PUNTEROS •Introducción •Conceptos básicos •Definición y declaración de punteros](https://reader033.vdocuments.co/reader033/viewer/2022053000/5f04cf507e708231d40fd154/html5/thumbnails/20.jpg)
LA COMPARACIÓN
• Apnum1=Apnum2
• La comparación anterior daría comoresultado el valor ‘false’ ya que cada unoapunta a una dirección de memoriadiferente.
3
Apnum1
3
Apnum2
![Page 21: MEMORIA DINÁMICA: PUNTEROSjvalvarez/docencia/pII antiguo/tema2.pdf · MEMORIA DINÁMICA y PUNTEROS •Introducción •Conceptos básicos •Definición y declaración de punteros](https://reader033.vdocuments.co/reader033/viewer/2022053000/5f04cf507e708231d40fd154/html5/thumbnails/21.jpg)
LA ASIGNACIÓN
• Apnum1:=Apnum2
3
Apnum1
5
Apnum2
3
Apnum1
5
Apnum2
![Page 22: MEMORIA DINÁMICA: PUNTEROSjvalvarez/docencia/pII antiguo/tema2.pdf · MEMORIA DINÁMICA y PUNTEROS •Introducción •Conceptos básicos •Definición y declaración de punteros](https://reader033.vdocuments.co/reader033/viewer/2022053000/5f04cf507e708231d40fd154/html5/thumbnails/22.jpg)
LA ASIGNACIÓN
• Los cambios efectuados sobre Apnum1afectan a la variable Apnum2 (sonindistintas) (Alliasing).
• El espacio de memoria reservadoinicialmente por el puntero Apnum1 siguesituado en memoria. Una adecuada gestiónde la memoria hubiera exigido laliberación de ese espacio antes de efectuarla asignación.
3
Apnum1
5
Apnum2
![Page 23: MEMORIA DINÁMICA: PUNTEROSjvalvarez/docencia/pII antiguo/tema2.pdf · MEMORIA DINÁMICA y PUNTEROS •Introducción •Conceptos básicos •Definición y declaración de punteros](https://reader033.vdocuments.co/reader033/viewer/2022053000/5f04cf507e708231d40fd154/html5/thumbnails/23.jpg)
CONSISTENCIA ENTRE TIPOS
• Operaciones válidas
– Apnum1:=Apnum1– Apnum1=Apnum2– Apvector1:=Apvector2
• Operaciones no válidas:
– Apnum1:=Apchar;– Apnum1=Apvector;
![Page 24: MEMORIA DINÁMICA: PUNTEROSjvalvarez/docencia/pII antiguo/tema2.pdf · MEMORIA DINÁMICA y PUNTEROS •Introducción •Conceptos básicos •Definición y declaración de punteros](https://reader033.vdocuments.co/reader033/viewer/2022053000/5f04cf507e708231d40fd154/html5/thumbnails/24.jpg)
EL VALOR NIL
• Un modo alternativo de asignar un valor aun puntero es indicar que no apunta aningún dato. Esto se lleva a cabo mediantela constante predefinida “nil”
• “nil” es independiente del tipo del datoapuntado por lo que puede ser utilizado porcualquier puntero.
– Apcar:=nil;– Apcar=nil;
• Representación gráfica:
![Page 25: MEMORIA DINÁMICA: PUNTEROSjvalvarez/docencia/pII antiguo/tema2.pdf · MEMORIA DINÁMICA y PUNTEROS •Introducción •Conceptos básicos •Definición y declaración de punteros](https://reader033.vdocuments.co/reader033/viewer/2022053000/5f04cf507e708231d40fd154/html5/thumbnails/25.jpg)
APLICACIONES NORECURSIVAS CON
PUNTEROS
• Asignación de objetos no simples en unsolo paso
• Definición de funciones cuyo resultado noes simple
![Page 26: MEMORIA DINÁMICA: PUNTEROSjvalvarez/docencia/pII antiguo/tema2.pdf · MEMORIA DINÁMICA y PUNTEROS •Introducción •Conceptos básicos •Definición y declaración de punteros](https://reader033.vdocuments.co/reader033/viewer/2022053000/5f04cf507e708231d40fd154/html5/thumbnails/26.jpg)
ASIGNACIÓN DE OBJETOSNO SIMPLES
• Esta aplicación es de utilidad cuando semanejan variables o estructuras de datos degran tamaño (por el elevado coste quesupone el realizar la copia de todas suscomponentes).
– Asignación de variables de gran tamaño
– Ordenación de vectores con elementos de grantamaño.
![Page 27: MEMORIA DINÁMICA: PUNTEROSjvalvarez/docencia/pII antiguo/tema2.pdf · MEMORIA DINÁMICA y PUNTEROS •Introducción •Conceptos básicos •Definición y declaración de punteros](https://reader033.vdocuments.co/reader033/viewer/2022053000/5f04cf507e708231d40fd154/html5/thumbnails/27.jpg)
EJEMPLO IASIGNACIÓN DE VARIABLES DE GRAN
TAMAÑO
TYPEtFicha=record
nombre:string;direccion:string;..............
End; {tFicha}
VARpers1,pers2:tFicha;
BEGIN....................Pers1:=pers2; {operación muy costosa en
espacio y tiempo}....................
![Page 28: MEMORIA DINÁMICA: PUNTEROSjvalvarez/docencia/pII antiguo/tema2.pdf · MEMORIA DINÁMICA y PUNTEROS •Introducción •Conceptos básicos •Definición y declaración de punteros](https://reader033.vdocuments.co/reader033/viewer/2022053000/5f04cf507e708231d40fd154/html5/thumbnails/28.jpg)
SOLUCIÓN AL EJEMPLO I
TYPEtApficha=^tFicha;tFicha=record
nombre:string;direccion:string;..............
End; {tFicha}
VARp1,p2:tApficha;
BEGIN....................p1:=p2; {asignación instantánea}....................
![Page 29: MEMORIA DINÁMICA: PUNTEROSjvalvarez/docencia/pII antiguo/tema2.pdf · MEMORIA DINÁMICA y PUNTEROS •Introducción •Conceptos básicos •Definición y declaración de punteros](https://reader033.vdocuments.co/reader033/viewer/2022053000/5f04cf507e708231d40fd154/html5/thumbnails/29.jpg)
EJEMPLO IIORDENACIÓN DE VECTORES CONELEMENTOS DE GRAN TAMAÑO
TYPEtApFicha=^tFicha;tFicha=record
nombre:string;direccion:string;..............
End; {tFicha}{tListaAlumnos=Array[1..100] of tFicha;}tlistaApAlum=array[1..100] of tApFicha;.............
• Las operaciones de ordenación y búsquedase realizan sobre el array de punteros.
![Page 30: MEMORIA DINÁMICA: PUNTEROSjvalvarez/docencia/pII antiguo/tema2.pdf · MEMORIA DINÁMICA y PUNTEROS •Introducción •Conceptos básicos •Definición y declaración de punteros](https://reader033.vdocuments.co/reader033/viewer/2022053000/5f04cf507e708231d40fd154/html5/thumbnails/30.jpg)
FUNCIONES DE RESULTADONO SIMPLE
• Como en el caso anterior se cambia elobjeto por el puntero que lo apunta.
• Ejemplo: Definir un subprograma que apartir de un punto del plano, un ángulo yuna distancia calcule la posición de unnuevo punto.
![Page 31: MEMORIA DINÁMICA: PUNTEROSjvalvarez/docencia/pII antiguo/tema2.pdf · MEMORIA DINÁMICA y PUNTEROS •Introducción •Conceptos básicos •Definición y declaración de punteros](https://reader033.vdocuments.co/reader033/viewer/2022053000/5f04cf507e708231d40fd154/html5/thumbnails/31.jpg)
FUNCIONES DE RESULTADONO SIMPLE, EJEMPLO
........TYPE
tPunto=recordx,y:real;
end; {tPunto}tApPunto=^tPunto;
VARangulo,distancia:real;origen:tPunto;pDestino:tApPunto;
..........FUNCTION Destino(orig:tPunto;ang,dist:real):tApPuntoVAR
pPun:tApPunto;Begin
New(pPun);pPun^.x:=orig.x+dist*cos(ang);pPun^.y:=orig.y+dist*sen(ang):destino:=pPun;
End; {Destino}