//例子中的三个变量让 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 |