arrays - 访问(传统)记录的字段

标签 arrays delphi pointers

关闭。这个问题需要details or clarity .它目前不接受答案。












想改进这个问题?通过 editing this post 添加详细信息并澄清问题.

5年前关闭。




Improve this question




我有一系列传统记录。

当我知道记录的开始地址、字段的偏移量和字段的类型时,如何访问第 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^);

等等...

这不像我预期的那样工作。请问我哪里错了?

最佳答案

doesn't work as I expected


我知道您发布的代码是在尝试使其正常工作的过程中被复制的,但下一次,解决语法错误后发布代码。另外,请说明它是如何不起作用的,不要只要求我们为您调试。
足够的咆哮
我已经解决了一个类型错误,所以代码现在可以工作,但仍然很麻烦。
p := pointer(cardinal(@aArray[5])+12); // 12 = offset of field "aString"
writeln(Tstring(p^));
基本上,您忘记了 aArray 的地址在将其转换为启用算术的 Cardinal 之前类型。
这就是为什么类型转换被认为是不安全的。类型错误很好地隐藏在其他类型转换之后。

关于arrays - 访问(传统)记录的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37505653/

相关文章:

database - ClientDataSet 将数字四舍五入为 15 位

c++ - 通过引用传递指针值

c++ - 2个动态数组初始化之间的区别

java - 如何在 Java 中为 n 数组添加增量?

javascript - 滚动浏览一系列图像,

delphi - 如何确定程序是否需要提升权限?

c++ - 指向未指定大小 "(*p)[]"的数组的指针在 C++ 中非法但在 C 中合法

delphi - 贪吃蛇游戏应该使用什么数据结构?

C. 函数修改动态分配的二维数组时的段错误

c - 能够改变 const 指针的值