从指针复制数据?

时间:2010-11-02 05:38:08

标签: delphi pointers copy record

...
  PAnalyzeInfo = ^TAnalyzeInfo;
  TAnalyzeInfo = record
    pPitch: array of Single;
    pEnergy: array of Single;
    pPitchAccent: array of Single;
    pEnergyAccent: array of Single;
    pDicAccent: array of Single;
    pScore: array of Single;
    pBoundary: Integer;
    szRecWord: array of array of AnsiChar;
    nRecWordNum: Integer;
    nFrameNum: Integer;
  end;
...

我有pDataSource: PAnalyzeInfo包含数据,我想将其复制到一个新的自变量。 MyData : TAnalyzeInfo

是否可以复制整个结构或逐个添加?

3 个答案:

答案 0 :(得分:5)

在Delphi中,您可以通过分配来复制记录,这要归功于编译器的魔力。

MyData := DataSource^;

动态数组是引用计数的,因此只要您不需要真正的深层副本,分配也会处理动态数组。通过简单的分配,他们只需共享相同的内存。

如果您不想要,可以单独复制它们:

MyData.pPitch = Copy(pDataSource^.pPitch, Low(pDataSource^.pPitch), 
                                          High(pDataSource^.pPitch);

答案 1 :(得分:4)

不能使用单个复制命令复制动态数组。你必须:

  1. 复制每个非阵列字段
  2. 对于每个阵列
    1. 在目标
    2. 中创建一个正确大小的新数组
    3. 复制数组成员
  3. 如果阵列是静态的,那将会容易得多。在这种情况下,复制整个内存块是可能的。

答案 2 :(得分:1)

您可以使用系统单元中声明的move过程: system.move(pDataSource ^,MyData,sizeof(TAnalyzeInfo));