gpt4 book ai didi

Delphi 数组初始化

转载 作者:行者123 更新时间:2023-12-03 15:42:09 25 4
gpt4 key购买 nike

这在某种程度上是我之前问题的延续,found here.本质上,我试图用一个基本示例来测试 dll/函数,但我得到了“E2010 - 不兼容类型:AInteger/ADouble 和 Set”和“E1012 - 常量表达式”违反了我的数组上的子范围边界错误。我(在某种程度上)明白它想表达的意思,但不知道我应该解决什么问题。例如:

var
n: Integer;
Ap, Ai: AInteger;
Ax, b: ADouble;

begin
// Initializations
n := 5;
Ap := [0, 2, 5, 9, 10, 12]; <- E2010
Ai := [0, 1, 0, 2, 4, 1, 2, 3, 4, 2, 1, 4]; <- E2010
Ax := [2, 3, 3, -1, 4, 4, -3, 1, 2, 2, 6, 1]; <- E2010 and E1012
b := [8, 45, -3, 3, 19]; <- E1012

其中 AIntegerADouble 类型是我的数组:

ADouble = array[0..High(Integer) div SizeOf(Double) - 1] of Double;
AInteger = array[0..High(Integer) div SizeOf(Integer) - 1] of Integer;

并且应该以这种方式初始化(​​根据 Rudy 的 Delphi 页面和其他 C-to-Pascal 源代码),因为它们是用 C 编写的 double Ax[] 。我确信有一些简单的东西我做错了或者可以为了测试我的 dll 而进行更改,但也许我谷歌搜索错误,因为我找不到示例/解决方案。因此,以问题形式:

Q1:E1012指的是

"And if you do things like these [AInteger and ADouble], be sure not to come too close to High(Integer), since the compiler might complain that the data structure would be too large." (quoted from Rudy's page)

问题2:我应该如何更改此代码?

预先感谢您的帮助。

最佳答案

您可以使用这样的语法来完成此操作。

这样定义数组:

ADouble = array[0..High(Integer) div SizeOf(Double) - 1] of Double;

将初始化整个 32 位 RAM 大小的整数数组!您将永远无法分配这样的变量(仅在 Win64 上,但您将使用 4 GB RAM 来仅存储 6 个整数)! :)

您的数组需要动态,即在运行时具有变化的大小。所以你必须这样定义它:

type
AInteger = array of integer;

在语言的当前状态下,这样的数组不能直接赋值,AFAIR。

所以你需要写这样一个函数:

procedure SetArray(var dest: AInteger; const values: array of integer);
begin
SetLength(dest,Length(values));
move(values[0],dest[0],length(values)*sizeof(integer));
end;

您可以使用常量数组作为源:

const
C: array[0..5] of Integer = (0, 2, 5, 9, 10, 12);
var
Ap: AInteger;
begin
SetArray(Ap,C);

或者使用开放数组参数:

var
Ai: AInteger;
begin
SetArray(Ai,[0, 2, 5, 9, 10, 12]);

当然,第二种解决方案听起来更接近您的期望。

更新:对于较新的版本,您当然可以使用动态数组构造函数,如下所示:

var
Ai: AInteger;
begin
Ai := AInteger.Create(0,2,5,9,10,12);

更新 2:从 XE7 开始,您可以使用另一种更简洁的语法:

var
Ai: AInteger;
begin
Ai := [0,2,5,9,10,12];

关于Delphi 数组初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17153787/

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