如何在delphi中传递一个字符串数组参数

时间:2017-12-21 19:44:06

标签: arrays delphi delphi-10.1-berlin

我的Delphi有问题。

我写了一个这样的函数:

function MyFunction(arr: array of AnsiString): Boolean;
begin
  //code here
end;

现在,当我将一个AnsiString数组直接传递给函数时,就像这样,一切都很完美:

MyFunction(['one', 'two', 'three']);

但是,当我尝试像这样存储这个数组时:

var arr: array of AnsiString;

procedure MyProcedure;
begin
  arr[0] := ['one', 'two', 'three'];
  MyFunction(arr[0]);
end;

存在不匹配错误。

我是Delphi的初学者,但这确实令人困惑。

1 个答案:

答案 0 :(得分:8)

你的第二个例子在功能上与第一个例子不同。

第一个例子很好。该函数使用open array作为输入参数,并且您正在该参数中直接构造一个固定的字符串数组,这非常好。任何数组类型都可以传递给开放数组参数。

在第二个示例中,您声明了dynamic array个字符串,但是您没有为该数组分配任何内存,并且您正在尝试将其第一个元素(即单个字符串)指定为指向一个固定的字符串数组。然后你试图传递那个期望数组的元素(再次,一个字符串)。这就是代码无法编译的原因。

编写程序的正确方法更像是这样:

procedure MyProcedure;
var
  arr: array of AnsiString;
begin
  SetLength(arr, 3);
  arr[0] := 'one';
  arr[1] := 'two';
  arr[2] := 'three';
  MyFunction(arr);
end;

可替换地:

procedure MyProcedure;
var
  arr: array of AnsiString;
begin
  arr := ['one', 'two', 'three'];
  MyFunction(arr);
end;

可替换地:

type
  TAnsiStringArray = array of AnsiString;

procedure MyProcedure;
var
  arr: TAnsiStringArray;
begin
  arr := TAnsiStringArray.Create('one', 'two', 'three');
  MyFunction(arr);
end;