我有一个指针变量Value,我需要在value保持不变的地址位置设置0。
function Setvalto(Value :Pointer);
begin
Value:=0;
end;
以上代码可能会更改指针变量保留的地址,但我想将Value保留的地址设置为零。
答案 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