consider this code:
program test;
uses crt;
var ptr1, ptr2:^integer;
begin
new(ptr1);
new(ptr2);
writeln('ptr1: ',integer(@ptr1), ', ptr2: ', integer(@ptr2));
ptr1:=ptr2;
write('ptr1: ',integer(@ptr1), ', ptr2: ', integer(@ptr2));
readln;
end.
second ‘write’ should give the same result for ptr1 and ptr2, but it gives (lazarus – free pascal):
ptr1: 4243456, ptr2: 4243472
ptr1: 4243456, ptr2: 4243472
In my opinion it should be:
ptr1: 4243472, ptr2: 4243472
I’m completely new to pointers. Did I understand something wrong?
Regards.
When you write @ptr1 you are not accessing the pointer, but creating a new pointer pointing to ptr. (pascal is not like perl with variable prefixes)
When you write
, you get what you expected
(but it is better to use PtrInt instead of integer, because integer only works on 32 bit systems)