개방 배열 매개변수
개방 배열 매개변수 (Open array parameters)
배열의 길이를 미리 정하지 않고 프로시저에 넘기고 싶을 때가 있어요. Free Pascal은 Delphi처럼 길이가 지정되지 않은 배열을 매개변수로 받는 개방 배열(open array)을 지원해요.
본문
Free Pascal은 개방 배열의 전달을 지원해요. 즉 프로시저를 Delphi처럼 길이가 지정되지 않은 배열을 매개변수로 갖도록 선언할 수 있어요. 개방 배열 매개변수는 프로시저나 함수 안에서 시작 인덱스가 0이고, 마지막 요소 인덱스가 High(parameter)인 배열로 접근할 수 있어요.
예를 들어, 다음 매개변수는
Row : Array of Integer;
다음과 동등해요.
Row : Array[0..N-1] of Integer;
여기서 N은 함수에 전달된 배열의 실제 크기예요. N-1은 High(Row)로 계산할 수 있어요.
구체적으로, 빈 배열이 전달되면 High(Parameter)는 -1을 반환하고, Low(Parameter)는 0을 반환해요.
개방 배열 매개변수는 값으로, 참조로, 또는 상수 매개변수로 전달될 수 있어요. 참조나 상수로 전달되는 경우 프로시저는 실제 배열의 포인터를 받아요. 값으로 전달되는 경우에는 배열의 복사본을 받아요. 함수나 프로시저 안에서, 개방 배열은 또한 개방 배열로 선언된 함수에만 전달할 수 있어요. 고정 길이 배열을 받는 함수나 프로시저에는 전달할 수 없어요.
다음은 개방 배열을 사용하는 함수의 예시예요.
Function Average (Row : Array of integer) : Real;
Var I : longint;
Temp : Real;
begin
Temp := Row[0];
For I := 1 to High(Row) do
Temp := Temp + Row[i];
Average := Temp / (High(Row)+1);
end;
FPC 2.2부터는 개방 배열을 받는 함수에 **부분 배열(partial array)**을 전달하는 것도 가능해요. 전달할 배열의 범위를 지정하면 돼요. 다음 선언이 있다고 할 때,
Var
A : Array[1..100];
아래 호출은 100개 숫자의 평균을 계산해 출력해요.
Writeln('Average of 100 numbers: ',Average(A));
그리고 아래 호출은 첫 절반과 둘째 절반의 평균을 각각 계산해 출력해요.
Writeln('Average of first 50 numbers: ',Average(A[1..50]));
Writeln('Average of last 50 numbers: ',Average(A[51..100]));
더 알아보기
High,Low내장 함수는 배열의 경계를 다룰 때 자주 쓰여요.- 개방 배열의 특별한 형태인
Array of Const는 14.4.6에서 다뤄요.