基底ポインター・データ・タイプ
基底ポインターは、基底付き変数の記憶域を見付けるために使用します。 フィールド、配列、またはデータ構造を特定の基底ポインター変数を基礎とするように定義 し、基底ポインター変数が必要な記憶位置を指すように設定することによって、 記憶域がアクセスされます。
ポインター項目を定義するには、自由形式定義に POINTER キーワード
を指定するか、または、固定形式仕様書のデータ・タイプ記入項目にアスタリスク (*) を
指定します。
たとえば、ポインター PTR1 を基礎とし、長さが 5 の文字フィールド である基底付き変数 MY_FIELD について考えてみます。 基底付き変数には、記憶域内に固定した位置がありません。 ポインターを使用して、この変数の記憶域内での現在位置を指示する必要が あります。
-------------------------------------------------------------
| A | B | C | D | E | F | G | H | I | J | K | L | M | N | O |
-------------------------------------------------------------
PTR1-------------------.
|
V
-------------------------------------------------------------
| A | B | C | D | E | F | G | H | I | J | K | L | M | N | O |
-------------------------------------------------------------
PTR1-------------------.
|
V
-------------------------------------------------------------
| A | B | C | D | E | F | G | H | I | J | K | L | M | N | O |
-------------------------------------------------------------
PTR1-------------------.
|
V
-------------------------------------------------------------
| A | B | C | D | E | F | G | H | I | H | E | L | L | O | O |
-------------------------------------------------------------
フィールドの基底ポインターを定義するためには、定義仕様書 の BASED キーワード (BASED(基底ポインター名)を参照) を 使用してください。 基底ポインターは、基礎となっているフィールドと同じ有効範囲を持っています。
基底ポインター・フィールドの長さは 16 バイトでなければならず、16 バイト境 界で位置合わせされていなければなりません。 境界位置合わせについてのこの要件によって、データ構造のポインター・サブフィ ールドが前のフィールドに直接続かない原因となったり、また、複数オカレンス・データ 構造で発生が連続しない原因となる可能性があります。 サブフィールドの位置合わせの詳細については、データ構造サブフィールドの位置合わせを参照して ください。
2 つのポインターに減算を行って、両ポインター間のオフセットを決定する場合、 両ポインターは同じスペースまたは同じタイプの記憶域を指していなければなりません。 たとえば、静的記憶域内の 2 つのポインター、または自動記憶域内の 2 つの ポインター、または同じユーザー・スペース内の 2 つのポインターに対して 減算を行うことができます。
コピーされた値がオリジナルの値にコピーして戻されると、 オリジナルの値からポインターが脱落する可能性があります。
読み取り専用参照 (CONST キーワード) または値 (VALUE キーワード) を使用して、 ポインターを含むデータ構造をプロトタイプ・パラメーターとして渡した場合、 そのパラメーターが LIKEDS キーワードを使用してプロトタイプ化されるのではなく、 文字値としてプロトタイプ化されると、受け取られたパラメーターからポインター情報が脱落する可能性があります。 ポインターを含むデータ構造を戻した場合にも、似たような問題が発生する可能性があります。