0

考虑这段代码:

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

我对指针完全陌生。我理解错了吗?

问候。

4

2 回答 2

1

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

当你写

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

, 你得到了你所期望的

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

于 2012-11-01T11:55:25.373 回答
0

这是如何将 vlues 分配给 pascal 中的指针

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

于 2014-11-24T16:30:32.270 回答