在 Delphi 中, 几乎所有的类型都有对应的指针类型, 譬如:
Char PChar
Word PWORD
Double PDouble
TPoint PPoint
甚至一种类型对应这着几种指针类型, 譬如:
Integer PInteger PINT
WideChar PWideChar PWChar
即使它没有定义, 我也可以直接使用一个类型的指针, 譬如声明一个整数的指针变量:
var px: ^Integer;
也可以先自定义指针类型, 再使用, 譬如:
type MyIntPointer = ^Integer;
var px: MyIntPointer;
看来声明指针类型还是挺方便, 但使用有点麻烦, 需要先申请内存!
我们可以用以下三种方法, 为指针(譬如是一个 Double 类型的指针)去申请需要的内存:
var
pd: PDouble;
begin
New(pd);
pd^ := 99.9;
ShowMessage(FloatToStr(pd^)); {99.9}
Dispose(pd);
end;
var
pd: PDouble;
begin
GetMem(pd, SizeOf(Double));
pd^ := 99.9;
ShowMessage(FloatToStr(pd^)); {99.9}
FreeMem(pd);
end;
const
size = SizeOf(Double);
var
pd: PDouble;
begin
pd := AllocMem(size);
pd^ := 99.9;
ShowMessageFmt('%p -> %g', [pd, pd^]); { 00AD0EC0 -> 99.9 }
ReallocMem(pd, 2 * size);
ShowMessageFmt('%p -> %g', [pd, pd^]); { 00AF5030 -> 99.9 }
pd := ReallocMemory(pd, 100 * size);
ShowMessageFmt('%p -> %g', [pd, pd^]); { 00A6B090 -> 99.9 }
FreeMem(pd);
end;