如何用for循环遍历G1-G4的记录字段?
TrFireGroup = record
idx: integer;
G1: integer;
G2: integer;
G3: integer;
G4: integer;
FGroup: integer;
MstIdx: integer;
Status: byte;
procedure Clear;
end;
最佳答案
这可能不是一个好主意,但有可能。
procedure Test();
var
i: Integer;
rec: TrFireGroup;
GPtr: PInteger;
value: Integer;
begin
// Initialize rec ...
// Get pointer to first G? field
GPtr := @rec.G1;
// Loop over G fields
for i := 0 to 3 do
begin
// Use value G? field here...
// For example: value := GPtr^;
// Increment pointer, thus moving it with four bytes.
Inc(GPtr);
end;
end;
首先获取指向记录中第一个字段的指针 (
GPtr
)。然后,我们通过取消引用指针来使用该值 (
GPtr^
)。最后,将指针增加到下一个值 (
Inc(GPtr)
)。 请注意,增量是根据所引用类型的大小移动指针。当我们使用指向 Integer (
PInteger
) 的指针时,Inc
使用SizeOf(Integer)
移动指针,从而前进到记录中的下一个字段。
再说一遍,这不是一个好的做法。
在这种情况下,指针算术是多余的,除非记录中有数百个字段(这是非常罕见的),但如果您确实需要,这是一种方法。
仅供引用,这里有关于 Delphi 中的指针和指针算术的非常详细和高质量的解释:
关于delphi - 迭代记录字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35773695/