基底ポインターは、基底付き変数の記憶域を見付けるために使用します。 フィールド、配列、またはデータ構造を特定の基底ポインター変数を基礎とするように定義 し、基底ポインター変数が必要な記憶位置を指すように設定することによって、 記憶域がアクセスされます。
たとえば、ポインター PTR1 を基礎とし、長さが 5 の文字フィールド である基底付き変数 MY_FIELD について考えてみます。 基底付き変数には、記憶域内に固定した位置がありません。 ポインターを使用して、この変数の記憶域内での現在位置を指示する必要が あります。
次が記憶域のある区域のレイアウトであるとします。
------------------------------------------------------------- | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | -------------------------------------------------------------
ポインター PTR1 を G を指すように設定すると、
PTR1-------------------. | V ------------------------------------------------------------- | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | -------------------------------------------------------------
MY_FIELD は、'G' で始まる記憶域内の位置に置かれるように なり、その値は 'GHIJK' です。ポインターが 'J' を指すように移動される と、MY_FIELD は 'JKLMN' になります。
PTR1-------------------. | V ------------------------------------------------------------- | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | -------------------------------------------------------------
MY_FIELD が EVAL ステートメントによって 'HELLO' に変更されると、'J' で始まる 記憶域は変更されます。
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 キーワードを使用してプロトタイプ化されるのではなく、 文字値としてプロトタイプ化されると、受け取られたパラメーターからポインター情報が脱落する可能性があります。 ポインターを含むデータ構造を戻した場合にも、似たような問題が発生する可能性があります。
(C) Copyright IBM Corporation 1992, 2006. All Rights Reserved.