如何设置特定值到指针变量中包含的地址位置?

时间:2019-01-21 15:48:02

标签: delphi

我有一个指针变量Value,我需要在value保持不变的地址位置设置0。

function Setvalto(Value :Pointer);
begin
Value:=0;
end;

以上代码可能会更改指针变量保留的地址,但我想将Value保留的地址设置为零。

1 个答案:

答案 0 :(得分:3)

您必须知道该指针处理的数据的类型

例如,对于short,您可以将指针转换为正确的类型并进行

PShort(Value)^ := 42;

在这种情况下,此指针寻址的外部数据将被更改。


还要注意,在此过程中更改Value本身不会影响外部变量,因为参数是“按值”传递的。

并且function需要结果类型

完整的示例:

var
  sh: short;
  p: Pointer;

procedure SetShort(Value :Pointer);
begin
  PShort(Value)^ := 42;
  Value:= nil;
  Memo1.Lines.Add(Format('inside %p', [Value]));
end;

begin
  sh := 1;
  p := @sh;
  Memo1.Lines.Add(Format('before %d %p', [sh, p]));
  SetShort(p);
  Memo1.Lines.Add(Format('after %d %p', [sh, p]));

结果:

before 1 0018F56E
inside 00000000
after 42 0018F56E