delphi - 迭代记录字段

标签 delphi for-loop records

如何用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/

相关文章:

德尔福XE7 : TEdit TextHint Color

string - 为什么 TPageProducer 不删除字符串中的引号?

java - 打破 Java 中的嵌套 for 循环

c - 如何在C中获取数组中两个索引的总和?

python - Python 记录中的省略引用

haskell - 如何使用记录设计扩展

delphi - 在Delphi中显示多行文本的组件

delphi - 无法将函数引用从框架传递到表单

python - For 循环正在覆盖列表中的字典值

F#中的记录列表?