考虑这段代码:
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
我对指针完全不熟悉。我理解错了吗?
问候。
答案 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));