値が、メモリのアドレスである、データ型。
宣言
ポインタは、その値がメモリのアドレスを示す
変数 です。このメモリを'指す'ことから'ポインタ'と言います。
ポインタによって指し示されるデータの型は、ポインタの型に従います(
Integer Pointer は、
Integer データを示します)。
ポインタは、他の変数と同じように宣言しますが、型名の後ろに接尾語 "
pointer" や "
ptr" を付けます。
ポインタ変数に代入
ポインタは、メモリ・アドレスであり、ポインタ自体の値は、そのメモリのアドレスです。
ポインタ変数に代入することは、それに何かへのメモリ・アドレスを代入することです。
ポインタにメモリ・アドレスを割り当てる1つの方法は、
Operator @ (Address of) を使って、プログラム内の他の変数のアドレスを取得することです。
示されたデータを参照する
ポインタによって示されたデータには、
演算子 * (値)を使ってアクセスできます。
この演算子は、オペランド(演算の対象となるもの)が示すデータへの参照を、返します。
下の例を参照下さい。
Dim myInteger As Integer = 10
Dim myPointer As Integer Pointer = @myInteger
*myPointer = 20
Print myInteger
Sleep
上の例では、
myInteger と呼ばれる
Integer 変数を定義します。
そして、
myInteger が保存されるメモリで、場所を示す
myPointer と呼ばれる
Integer ポインタを定義しています。
演算子 @ (アドレス)が、
myInteger のアドレスを検索するために、使われます。
20 の値は、
myPointer が示す位置(
myInteger のアドレス、または
@myInteger)に割り当てられます。
*myPointer への変化が、直接
myInteger の値に影響します。(式 "
*myPointer" は、 "
myInteger" と同じです)
ユーザ定義の型へのポインタ
ユーザ定義された型へのポインタは、他のポインタと同じように定義して、使います。
Type か
Class のメンバーにアクセスするためには、下の2つのメソッドの内の、1つを必要とします:
Type myType
a As Integer
b As Double
End Type
Dim x As myType
Dim p As myType Pointer = @x
'' 1) ポインタを逆参照して、メンバーアクセス演算子を使う:
(*p).a = 10
(*p).b = 12.34
'' 2) メンバーアクセス演算子の短縮形式を使う:
Print p->a
Print p->b
Sleep
最初のメソッドは、
演算子 . (メンバーアクセス) を使用します。
この演算子は、参照からメンバーにアクセスします。このため、ポインタは、最初に、逆参照されます。
メンバーアクセス演算子は、逆参照演算子より高い優先度があります。このため、メンバーアクセス演算子を使う前に、丸括弧が、ポインターを逆参照するために必要です。
2番目のメソッドは、
演算子 -> (メンバーアクセスへのポインタ) を使用します。
この演算子は、ポインタからメンバーにアクセスします。(ポインタは自動的に、逆参照されます)。
どちらの形式も同じ結果になりますが、2番目のメソッドの方が、コードがより明確になるでしょう。
参照: