指针(pascal) - 我无法将一个指针指向另一个指针

时间:2012-11-01 11:38:44

标签: pointers pascal

考虑这段代码:

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.

第二次'写'应该为ptr1和ptr2提供相同的结果,但它给出了(lazarus - free pascal):

ptr1: 4243456, ptr2: 4243472
ptr1: 4243456, ptr2: 4243472

在我看来应该是:

ptr1: 4243472, ptr2: 4243472

我对指针完全不熟悉。我理解错了吗?

问候。

2 个答案:

答案 0 :(得分:1)

当你编写@ ptr1时,你没有访问指针,而是创建一个指向ptr的新指针。 (pascal不像带有可变前缀的perl)

写作时

 writeln('ptr1: ',integer(ptr1), ', ptr2: ', integer(ptr2));
 ptr1:=ptr2;
 write('ptr1: ',integer(ptr1), ', ptr2: ', integer(ptr2));

,你得到了你的期望

(但最好使用PtrInt而不是整数,因为整数仅适用于32位系统)

答案 1 :(得分:0)

这是如何为pascal

中的指针赋值

ptr1 ^:= 100; writeln(' ptr1:',整数(ptr1 ^),',ptr2:',整数(@ptr2));