随笔 - 2146  文章 - 97 评论 - 11767 trackbacks - 253


//例子中的三个变量让 absolute 都给弄到一块了, 这有时会很方便; 但我总也想不到用, 还是不熟.
procedure TForm1.FormCreate(Sender: TObject);
var
  num: Int64;
  pt: TPoint absolute num;
  arr: array[0..1] of Integer absolute pt;
begin
  pt.X := 111;
  pt.Y := 222;

  ShowMessageFmt('%d, %d', [arr[0], arr[1]]);                {111, 222}
  ShowMessageFmt('%d, %d', [num shl 32 shr 32, num shr 32]); {111, 222}
end;


在这里补充回复 "followers" 在下面提出的问题:

absolute 可让变量共享内存; 共享内存的其中一个变量赋值后, 其他变量会同时改变.

如果不用 absolute, 使用类型转换也可以, 不过这样更方便.

另外, Delphi 的可变记录、变体类型和 C 语言的联合也都是这个原理, 不如看个表更直观:

Int64: 1 2 3 4 5 6 7 8
TPoint: X Y
本例数组: arr[0] arr[1]
Integer: 1 2 3 4
Word: 1 2
Byte: 1

posted on 2009-02-19 16:03  万一  阅读(...)  评论(...编辑  收藏