gpt4 book ai didi

c++ - 动态数组,从 C++ 到 Delphi 的转换

转载 作者:太空狗 更新时间:2023-10-29 23:26:26 25 4
gpt4 key购买 nike

我不明白为什么 Delphi 不像 C++ 那样工作

float *buffer;
buffer=new float[2];
buffer[0]=0.1;
buffer[1]=0.2;
buffer+=1;
//now buffer[0] has value of buffer[1] and buffer[1] has value 0

德尔福代码:

buffer: array of Single;
SetLength(buffer,2);
buffer[0]:=0.1;
buffer[1]:=0.2;
buffer:=buffer+1; //doesn't work

最佳答案

您展示的 Delphi 代码不是 C++ 代码所做的等效转换 - 使用指针算法。以下是更接近的翻译:

如果您使用的是 D2009+:

{$POINTERMATH ON}

var
buffer: PSingle;

GetMem(buffer, SizeOf(Single) * 2);
buffer[0] := 0.1;
buffer[1] := 0.2;
buffer := buffer + 1;

如果您使用的是 D2007 或更早版本,请改用类似这样的内容:

type
TSingleArray = packed array[0..(MaxInt div SizeOf(Single))-1] of Single;
PSingleArray = ^TSingleArray;

var
buffer: PSingle;

GetMem(buffer, SizeOf(Single) * 2);
PSingleArray(buffer)^[0] := 0.1;
PSingleArray(buffer)^[1] := 0.2;
Inc(buffer);

关于c++ - 动态数组,从 C++ 到 Delphi 的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23228597/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com