Ne ne ne, nebylo.
Stále mě nechápeš. Já nemám na mysli adresu, kam bude ukazovat i2. Já se ptám na obsah proměnná integer na paměťovám místě, kam ukazuje i2. Pascalská konstrukce
i2^
dereferencuje ukazatel, takže to už není adresa, ale číslo velikosti integer na místě, kam adresa ukazuje.Mě je přece jasné, KAM by ukazatel ukazoval. Chci říct, že to nemá smysl, protože programátor předem neví, co se na té adrese nachází . (no dobře, v mnoha případech zkušenější programátor ví, že tam bude určitá proměnná, která byla deklarována hned vedle, ale je určitě lepší použít přímo tu proměnnou). Proto jsem tvrdil, že obvykle nemá smysl takto posouvat adresu z jedné proměnné.
Něco jiného je to v řetězcích. Pokud PChar ukazuje na znak, lze předpokládat, že na adrese P1+1 (kde p1 je PChar) bude taky znak. Proto je tato konstrukce povolena. Pokud ale mám násl. kód:
var I: Integer;
D: Double;
L: Longint;
S: String;
P: Pointer;
PI: PInteger;
begin
I := 12345;
PI := @I;
PI := PI + 1; //toto neni v Pascalu povoleno; predpokladejme ze se ukazatel posune o integer, tedy 4B
end;
tak já sice vím, že po jeho provedení bude PI ukazovat na D, ale to už není integer, takže hodnota v PI^ bude (alespoň zdánlivě) nesmyslná.