RE:¿No se usa el símbolo ^?
Saludos a todos.
_______________________________________________________________
@ es el unico operador asociado a los punteros @ tambien llamado (addr)
devuelve un puntero que apunta al operando , y es compatible con todos los
tipos de punteros ,permite hacer una reinterpretacion del tipo de datos.
@ cambia de significado aplicado a procedimientos , funciones y assember
observar que aunque no se pueden asignar punteros de tipos distintos se
puede hacer uando un puntero sin tipo.
si a un puntero sin tipo le damos una direccion , el compilador ignora el
tamaño ,?????por tanto no podemos recuperar nada de forma directa ¿¿¿¿
, pero podemos recuperarlo asignando el puntero sin tipo a otro con un nuevo tipo
IMPORTANTE:los punteros asignados apuntan a otra variable pero mantienen
su extructura interna si es de tipo word siempre sera de tipo word
aunque apunten a byte , ¡¡¡ con lo cual podemos recoger basura !!!.
-------------------------------------------------------------------
type x_mini=array[0..1]of char;
var
p1:^byte;
p2:^word;
p3:pointer;
p4:^x_mini; { no lo vamos a usar}
a:byte;
b:word;
mini:x_mini;
begin
---------------------------------------------------------
vamos a incrementar un byte desde un word
---------------------------------------------------------
a:=1;
b:=4;
writeln('a: ',a,' b:',b);
p1:=@a; { p1 de tipo byte apunta a a de tipo byte }
{ p2:=p1; no podemos pues p1 de tipo byte p2 de tipo word }
p3:=p1; { p3 es sin tipo (pointer) y apunta a p1 del tipo byte }
p2:=p3; { p2 del tipo word apunta a p3 que apunta a byte }
inc(p2^);
{se incrementa la var (a) desde p2 de tipo word pues apunta a p1 y este a(a)}
writeln('a: ',a,' b:',b);
p2:=@b; { ahora p2 apunta a word apuntando b }
p2:=@p2 { este es para vacilar p2 se apunta a si mismo }
--------------------------------------------------------------------------
en este otro ejemplo lo veremos mas claro ,vemos como hay una reinterpretacion
de datos, por ejemplo vamos a reinterpretar el array mini como array
pero con acceso desde word.
--------------------------------------------------------------------------
mini:='cd';
writeln('mini asignado directamente:',mini);
p2:=@mini;
p2^:=(98 shl 8)+97; { p2 ocupa dos bytes , los cambiamos por asscill a,b (invertidos)}
{
p2 sige siendo de tipo word pero con acceso a mini que es un array
de 2 caracteres
}
writeln('mini cambiado desde p2:',mini);
readln;
end.