如何将字符串数组传递给 delphi 中的函数参数
How can I pass array of string a parameter to function in delphi
我对 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 的初学者,但这真的很令人困惑。
您的第二个示例在功能上与第一个示例不同。
第一个例子很好。该函数将 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;
我对 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 的初学者,但这真的很令人困惑。
您的第二个示例在功能上与第一个示例不同。
第一个例子很好。该函数将 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;