構造体の配列

構造体は、他の変数と同様に、配列として宣言でき、配列をメンバーとして含めることができます。次に例を示します。

DECLARE 1 S(5),
      2 A FIXED BINARY,
      2 B(4) FLOAT BINARY,
      2 T(3),
            3 P POINTER,
            3 Q(6) CHARACTER(10);

この例では、S は 5 つの構造体の配列です。各構造体に、4 つの浮動小数点値の配列が続く固定小数点メンバーが格納され、それに続いて 3 つのサブ構造体の配列が格納されています。各サブ構造体には、ポインター変数とそれに続く 6 つの文字列変数の配列が格納されています。構造体全体での出現回数は、A が 5 回、B が 20 回、T が 15 回、P が 15 回、Q が 90 回となります。

構造体配列の各メンバーは、構造体配列内の要素と同じ数のインスタンスを持つため、それ自体が配列となります。前の例の B、T、および Q のように、メンバー自体が独自の次元情報を持つ配列である場合、配列はそれを含む構造体から追加の次元を継承します。たとえば、前の例の Q は境界が (5,3,6) の 3 次元配列です。

次元構造体のメンバーはいずれも配列であり、参照する際はそれぞれの次元について添え字を使用する必要があります。添え字は構造化参照内の任意の場所に記述できますが、それぞれを適用する名前の直後に記述することをお勧めします。前述の例を使用して、この推奨されるプログラミング方法を示します。

S(K) .A A の K 番目の要素への参照
S(K) .B(J) B (K, J) と同等
S(K) .T(J) .Q(I) S.T.Q (K, J, I)

S.T(K,J) .Q(I)

S(K,J, I) .T.Q と同等

アスタリスクを使用して構造体配列の全範囲 (クロスセクション) を参照することはできません。

次元構造体のメンバーは、ストリーム入出力の配列か、境界がアスタリスクとして指定された配列パラメーターの引数としてのみ使用できます。これらを割り当てることはできず、レコード入出力で使用したり、ADDR や DEFINED で使用したり、一定の境界を持つパラメーターに渡したりすることはできません。

次元構造体のメンバーへの添え字参照は、変数による参照が可能な任意のコンテキストで使用できます。