如何在delphi中正确地转换和传递参数

时间:2016-11-06 13:24:28

标签: arrays delphi pointers casting delphi-2007

我有一个非常简单的代码段,你可以在这里查看:

{{1}}

如何正确地投射testarray以将其传递给PickValue函数?上面的代码以当前形式崩溃。我正在使用delphi 2007.

提前致谢!

1 个答案:

答案 0 :(得分:7)

您无法将该静态数组转换为动态数组。这些类型根本不兼容。静态数组布局在一个连续的内存块中。动态数组在每个维度都间接到可变大小的数组。实际上将其视为具有额外编译器管理和元数据的^^Byte。没有多少铸件可以帮助你。

您至少有以下选项:

  1. 将静态数组的内容复制到动态数组。然后将该动态数组传递给您的函数。
  2. 将静态数组切换为动态数组,以便不需要转换。
  3. 安排您的函数接受静态数组而不是动态数组,以避免需要转换。
  4. 让函数接受指向第一个元素和内部维度的指针。然后手动执行索引。 i,j元素位于线性偏移i*innerDim + j
  5. 可能不需要指针类型PMatrix。动态数组已经实现为指针。这似乎是一个间接的程度太远了。

    当然,当数组索引仅达到2时要求元素3是不对的,但这是目前你担心的较少。请记住,动态数组是基于零的,并且您已根据静态数组指定了零。

    我很难能够推荐哪种解决方案最好,因为根据此处提供的简化示例,我不了解您的真实目标和用法。