我想将数组的引用传递给需要数组长度的函数。我想知道我是否必须传递它的长度,或者我可以从数组引用中检索它。
uses
Vcl.Dialogs, System.SysUtils, System.Types;
type
IntegerArray = array[0..$effffff] of Integer; // defined in System
PIntegerArray = ^IntegerArray; // defined in System
procedure Foo(const P: PIntegerArray);
begin
ShowMessage(IntToStr(Length(P^)));
end;
const
A: array[0..2] of Integer = (1, 2, 3);
var
B: TIntegerDynArray;
initialization
Foo(@A);
B := [4, 5, 6];
Foo(@B[0]);
end.
答案 0 :(得分:8)
要完成此操作,您需要声明open array参数:
procedure Foo(const A: array of integer);
begin
ShowMessage('Length of array:'+IntToStr(High(A)+1));
end;
将动态和静态数组传递给过程,数组长度由System.High给出。
Open数组:Integer类型的值,给出实际参数中的元素数减去一。
答案 1 :(得分:5)
您的问题等于以下内容:
给定数组的第一个元素的地址(可以是静态的还是动态的),我可以找到该数组的长度吗?
答案是否定的。你的方式有两个因素。