Quick start manual

Data types, variables, and constants
5-21
Structured types
In contrast, to make an independent copy of a dynamic array, you must use the
global Copy function:
var
A, B: array of Integer;
begin
SetLength(A, 1);
A[0] := 1;
B := Copy(A);
B[0] := 2; { B[0] <> A[0] }
end;
When dynamic-array variables are compared, their references are compared, not
their array values. Thus, after execution of the code
var
A, B: array of Integer;
begin
SetLength(A, 1);
SetLength(B, 1);
A[0] := 2;
B[0] := 2;
end;
A = B returns False but A[0] = B[0] returns True.
To truncate a dynamic array, pass it to SetLength, or pass it to Copy and assign the
result back to the array variable. (The SetLength procedure is usually faster.) For
example, if A is a dynamic array, A := SetLength(A, 0, 20) truncates all but the first 20
elements of A.
Once a dynamic array has been allocated, you can pass it to the standard functions
Length, High, and Low. Length returns the number of elements in the array, High
returns the array’s highest index (that is, Length–1), and Low returns 0. In the case of a
zero-length array, High returns –1 (with the anomalous consequence that High <
Low).
Note
In some function and procedure declarations, array parameters are represented as
array of baseType, without any index types specified. For example,
function CheckStrings(A: array of string): Boolean;
This indicates that the function operates on all arrays of the specified base type,
regardless of their size, how they are indexed, or whether they are allocated statically
or dynamically. See “Open array parameters” on page 6-16.