访问(传统)记录的字段

时间:2016-05-29 02:42:06

标签: arrays delphi pointers

我有一系列传统记录。

当我知道记录的开始地址,字段的偏移量和字段的类型时,如何访问第N条记录的字段? 例如

 type 
 Tstring = string[20];
 TRecord = packed record
  aInteger : integer;
  aDouble  : double;
  aString  : Tstring ;
  bString  : string;
end;

var
aArray : array[0..N] of Trecord;
p : pointer;

.... 
p := pointer(cardinal(aArray[5])+12); // 12 = offset of field "aString"
writeln(Tstring(p^);

依旧......

这不符合我的预期。哪里我错了,拜托?

1 个答案:

答案 0 :(得分:3)

  

没有像我预期的那样工作

我意识到您发布的代码在尝试使其生效之间被复制了,但下次在您解决语法错误后发布代码。另外,请说明无法正常工作,不要让我们为您调试。

足够的咆哮

我已经解决了类型错误,因此代码现在可以正常运行,但仍然非常毛茸茸的

p := pointer(cardinal(@aArray[5])+12); // 12 = offset of field "aString"
writeln(Tstring(p^));

基本上,在将其转换为支持arithmetics的aArray类型之前,您忘记使用Cardinal的地址。

这就是为什么类型转换被认为是不安全的。类型错误很好地隐藏在另一个类型转换后面。