FreeBASIC マニュアルのトップに戻る

FreeBASIC ProPgPointers

目次→教本→プログラマーのための案内Pointers←オリジナル・サイト

ポインタ(概要) 左にメニュー・フレームが表示されていない場合は、ここをクリックして下さい

←リンク元に戻る プログラム開発関連に戻る

値が、メモリのアドレスである、データ型。

宣言
ポインタは、その値がメモリのアドレスを示す 変数 です。このメモリを'指す'ことから'ポインタ'と言います。
ポインタによって指し示されるデータの型は、ポインタの型に従います(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" と同じです)

ユーザ定義の型へのポインタ
ユーザ定義された型へのポインタは、他のポインタと同じように定義して、使います。
TypeClass のメンバーにアクセスするためには、下の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番目のメソッドの方が、コードがより明確になるでしょう。

参照:
プログラマーのための案内に戻る
←リンク元に戻る プログラム開発関連に戻る

ページ歴史:2019-07-04 00:29:40
日本語翻訳:WATANABE Makoto、原文著作者:JeffMarshall

ホームページのトップに戻る

表示-非営利-継承