配列

配列は、すべて同じデータ型を持つ値の順序付けされたセットです。配列の要素は配列内での位置で参照されます。各配列は指定された数の次元で構成され、それぞれの次元について下限と上限が指定されます。次元のデフォルトの下限は 1 です。

配列の要素は行優先順で格納されます。各行の連続する要素が隣接するメモリ位置に格納されます。3 次元以上の配列では、要素に格納順でアクセスしていくと、右端の添え字が最も先に変わることになります。

例:

DECLARE A(1:4) FIXED BINARY(15); 
DECLARE B(0:3,0:5) FLOAT BINARY(21); 
DECLARE C(-2:10) CHARACTER(5);
DECLARE D(25,4,2) POINTER;

この例で、A は固定小数点 2 進値を保持する 1 次元配列です。下限は 1 で上限は 4 であるため、要素は 4 個になります。

B は浮動小数点 2 進値を保持する 2 次元配列です。下限はいずれもゼロで、上限は 3 および 5 です。したがって、B は 4 行 6 列となります。

C はそれぞれ 5 文字の文字列値を保持する 1 次元配列です。下限は -2 で上限は 10 であるため、要素は合計で 13 個になります。

D はポインター値を保持する 3 次元配列です。下限は指定されていないため、1 と見なされます。この配列は 4 行 2 列の 25 個の平面で構成され、要素数の合計は 200 個になります。

配列の次元の最大数は 8 です。配列の境界は、-2^31 から 2^31 -1 の範囲で任意に指定できます。配列の境界には次の制約事項があります。

注: PL/I の実装や基盤となるオペレーティング システムによっては、個々のデータ項目のサイズや静的または自動 (あるいはその両方) のデータ領域の合計サイズについて、追加の制約事項がある場合があります。詳細については、『Open PL/I ユーザー ガイド』を参照してください。

AUTOMATIC、DEFINED、CONTROLLED、BASED の配列の境界は、「ストレージ クラス」の章で説明しているように、整数値の式で指定できます。STATIC 配列の境界は、整数定数でなければなりません。パラメーター配列の境界は、整数定数またはアスタリスク (*) のいずれかです。パラメーター配列の境界としてアスタリスクを指定した場合、アスタリスクは下限と上限の両方を表し、対応する配列引数の実際の境界が配列パラメーターの境界として使用されることを意味します。次に例を示します。

DECLARE A(0:5) FIXED BINARY; 
CALL P(A);
   .
   .
   .
P: PROCEDURE(X);
   DECLARE X(*) FIXED BINARY;
      .
      .
      .

この例の P の呼び出しで、X の境界は (0:5) であり、X への参照はいずれも A への参照になります。

配列の要素は、配列の次元数と同じ数の添え字を使用して参照されます。次に例を示します。

DECLARE A(-2:5,4,3) FIXED BINARY;

この例では、A への参照 (-2,1,1) は、第 1 平面の 1 行目の列 1 の要素への参照になります。A への参照 (3,2,1) は、第 6 平面の 2 行目の列 1 の要素への参照になります。

配列の添え字は、整数値の式でなければなりません。固定小数点または浮動小数点の値を添え字として使用すると、コンパイラからエラー メッセージが返されます。ただし、組み込み関数の TRUNC、CEIL、FLOOR、または ROUND を使用すると、それらの値を整数値に変換できます。

添え字は、それぞれ対応する下限と上限で指定された範囲内に収まっていなければなりません。添え字の範囲チェックを要求しない限り、コンパイラで添え字の値の範囲をチェックするコードは生成されません。チェックを要求すると、添え字が範囲を超えている場合に ERROR 状態が通知されます。

配列の要素への添え字参照は、変数による参照が可能な任意のコンテキストで使用できます。

配列のクロスセクションは、アスタリスクを添え字として使用して参照することができます。アスタリスクを指定すると、対応する次元の全範囲 (下限から上限まで) が参照されます。前の例では、A への参照 (*,1,1) は、8 つすべての平面の 1 行目の列 1 の要素を参照します。A への参照 (*,*,*) は、配列の 96 個の要素をすべて参照します。

配列のクロスセクションは、ストリーム入出力またはレコード入出力で送信したり、引数として渡したり、サイズおよび形状が同じ他の配列に割り当てたりできます。