viernes, 5 de noviembre de 2010

PUNTEROS (puntos extras)

Un puntero es la dirección de “algo” en la memoria de un ordenador. 
Una variable tipo puntero es una variable que guarda un valor que es la dirección de una posición de la memoria en la cual se almacena otro dato.

Una dirección de memoria en el sistema operativo DOS se encuentra con dos enteros de dos bytes, llamados segmento y desplazamiento, con lo que una variable de tipo puntero necesitará 4 bytes de espacio en memoria.

Las variables puntero se usan normalmente para guardan direcciones de memoria de variables dinámicas en el segmento de montículo
Las variables puntero que se empleen al principio serán variables estáticas, pero más adelante se introducirán también variables dinámicas de tipo puntero.

Para poderlas declarar primero definimos el tipo de dato puntero y luego la variable o variables de ese tipo. Después de haber definido el tipo de dato puntero se debe indicar el tipo de dato que se va a guardar en la posición de memoria. 
(esto es importante porque cada tipo de dato diferente requieren distintas cantidades de espacio en memoria)

Un tipo puntero se declara con el tipo de la variable a la que apunta precedida por el símbolo ^.

EJEMPLO (TurboPascal)


type tipo_puntero = ^tipo_dato; { ^ : se lee como "apunta a" }
Ej.: type punteroaentero = ^integer; { declara el tipo } var
     p : punteroaentero; { declara la variable }

En este ejemplo, primero se declaro un tipo de dato puntero punterotipoentero que va a representar la dirección de memoria de un dato de tipo integer (entero) y posteriormente, se ha declarado una variable que sea estática de este tipo tipo_puntero

Aunque también aveces se puede incluir implícitamente la declaración del tipo en la declaración de la variable.

Ej.: var
 q : ^integer; 
 r : ^char;
 s : ^string[20];

También existen las operaciones con punteros, las cuales son las siguientes:

Creación de una nueva variable dinámica
Ej.: type puntero = ^integer; 
var p:puntero;
begin 
new(p);
Identificación de una variable dinámica
Ej: type puntero=^integer; 
var p : puntero; 
begin 
new(p);
p^:=50; { se almacena 50 en la variable dinámica }
Asignaciones entre variables puntero
Ej: type puntero=^integer; 
var p,q:puntero; 
begin new(p);
q:=p; { ambas variables puntero apuntan
a la misma dirección de memoria }

Liberación del espacio en memoria de una variable dinámica
Ej: type puntero=^integer; 
var p : puntero; 
begin 
new(p);
p^:=50; { Operaciones varias .. } dispose(p);
Operadores de relación
Ej:type puntero=^integer;
var p,q:puntero;
begin 
... if p=q then ...
... while p<>nil do ...
Espero que esta información les aya sido de ayuda y pudiesen entender un poco mas que son los punteros 
Muchas gracias 

1 comentario: