RE:Aritmetica de punteros
No entendí bien lo que quieres hacer.
Un puntero a integer usando las estructuras que mencionas lo puedes usar para apuntar uno de los elementos del array, pero primero tienes que declarar una variable array.
O sea, si tienes
type Miarreglo= array [0..5] of integer;
de nada te sirve tenes un
var
P:^integer;
porque la declaración type solo declaras el tipo, no estás reservando memoria en ninguna parte, para ello deberías hacer también algo como:
var
M: Miarreglo;
pero si lo haces así ¿para qué necesitas el puntero si ya tienes la variable?.
Ahora bien, también podrías hacer algo como esto:
type Miarreglo= array [0..5] of integer;
var
P:^miarreglo;
y luego
new(P);
ahí estarías creando un puntero que apunta a un tipo Miarreglo, y puedes hacer algo como
P^[1]:=1;
El índice lo puedes cambiar por una variable si quieres u otro puntero a integer;
Digamos:
var
I:^integer;
y luego hacer algo como:
begin
new(P);
new(I);
I^:=1;
P^[I^]:=1;
writeln(P^[I^]);
Aunque sería lo mismo que hacer...
var
P:Miarreglo;
I: integer;
begin
I:=1;
P[I]:=1;
writeln(P[i]);
Solo que en este caso estarías trabajando con memoria estática.
No sé qué utilidad puede tener, alguna la tendrá, tú sabrás.