Ada*_*zek 3 arrays delphi delphi-10.1-berlin
我有Delphi的问题.
我写了一个这样的函数:
function MyFunction(arr: array of AnsiString): Boolean;
begin
//code here
end;
Run Code Online (Sandbox Code Playgroud)
而现在,当我将一个AnsiString直接传递给函数的数组时,就像这样,一切都很完美:
MyFunction(['one', 'two', 'three']);
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试像这样存储这个数组时:
var arr: array of AnsiString;
procedure MyProcedure;
begin
arr[0] := ['one', 'two', 'three'];
MyFunction(arr[0]);
end;
Run Code Online (Sandbox Code Playgroud)
存在不匹配错误.
我是Delphi的初学者,但这真的令人困惑.
你的第二个例子在功能上与第一个例子不同.
第一个例子很好.该函数将一个开放数组作为输入参数,并且您正在该参数中直接构造一个固定的字符串数组,这非常好.任何数组类型都可以传递给open数组参数.
在第二个示例中,您声明了一个动态字符串数组,但是您没有为该数组分配任何内存,并且您尝试将其第一个元素(即单个字符串)指定为指向固定的字符串数组.然后你试图传递那个期望数组的元素(再次,一个字符串).这就是代码无法编译的原因.
编写程序的正确方法更像是这样的:
procedure MyProcedure;
var
arr: array of AnsiString;
begin
SetLength(arr, 3);
arr[0] := 'one';
arr[1] := 'two';
arr[2] := 'three';
MyFunction(arr);
end;
Run Code Online (Sandbox Code Playgroud)
或者:
procedure MyProcedure;
var
arr: array of AnsiString;
begin
arr := ['one', 'two', 'three'];
MyFunction(arr);
end;
Run Code Online (Sandbox Code Playgroud)
或者:
type
TAnsiStringArray = array of AnsiString;
procedure MyProcedure;
var
arr: TAnsiStringArray;
begin
arr := TAnsiStringArray.Create('one', 'two', 'three');
MyFunction(arr);
end;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1245 次 |
| 最近记录: |