8.2.1 標準データ型のポインタ
ポインタ変数だけを定義することはできません。ポインタはデータ型を宣言する必要があります。
FreeBASICでは、ポインタには2つの名前があります。Pointer と Ptr で、どちらも同一のポインタ変数を宣言します。
ポインターの操作では、演算子@ または VarPtr を使って変数のアドレスを取得します。
StrPtr は文字列アドレスを取得し、ProcPtr は関数アドレスを取得します。
演算子* を使うと、ポインターが指すメモリー位置に格納されている実際の値にアクセスできます。
ここで、ポインタのデータ型に注意する必要があります。
さまざまなデータ型に応じて、
ポインターが指す領域と値が異なります。
たとえば、Short Ptrポインターは 2バイトのアドレスを指します。
値を取得するたびに 2バイトのデータしか取得できません。
アドレスの変更は毎回1ずつ増加するのではなく、毎回 2バイトのアドレスが変更されます。
文法:
例:
実行結果:(アドレスは環境によって変わります)
下記の結果になった場合について、下のブロック図でポインターを説明します。
変数 b は整数型のデータで、4バイトを占有します。一つの箱が Short型(2バイト)を表す場合、2つの箱を合わせて整数型のデータ(4バイト)になります。つまり、&HAA00 と &H5500 の箱を合わせて変数 b のデータになります。
ポインターa は b のアドレス(&H12FEC0)を指すため、b の下位 2バイトが取得され、ポインターが 1増加すると、アドレスは &H12FEC2 になり、 b の上位 2バイトを取得します。
8.2.2 ヌルポインター
ポインター変数の値が0またはヌル(0として定義されている場合)の場合、ゼロポインターまたはヌルポインターと呼びます。
この存在の意味は、ポインターの不正な参照を回避することです。もう1つは、状態をプログラム内の比較として使って、ポインターに正確な値があるかどうかを判別することです。
一般に、ポインターを宣言するときに初期化しない場合、コンパイラーはポインターをデフォルトで 0 に設定します。これはヌルポインターです。
例:
8.2.3 Anyポインター
ポインタは、任意のデータ型を指す Anyポインタとして宣言することもできることにも注意してください。
任意のデータ型のポインタは、使用時にその型を型変換する必要があります。
8.2.4 ポインターへのポインター
ポインタへのポインタは、通常のポインタと本質的な違いはありません。これまでの理解によれば、ポインタは変数であり、ポインタへのポインタも特別な変数です。
格納される値はポインタのアドレスなので、通常の変数とは違い、ポインターのみを指すことができます。
ポインターへのポインターを使って、配列のようなポインターの配列を定義できます。
ポインターへのポインターで、指すポインターのデータにアクセスするか、ポインターが指すポインターが指すデータにアクセスすることができます。
ここで、ポインタ値*操作は、右から左の順序で実行されることに注意してください。
構文:
例: