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

FreeBASIC 学習ノート 8.2 ポインター型と操作

目次→教本→いっしょに学ぼうhttps://blog.csdn.net/rainheart311/article/details/78833090←オリジナル・サイト

学習ノート 8.2 ポインター型と操作 左にメニュー・フレームが表示されていない場合は、ここをクリックして下さい

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


←前:8.1 ポインタの概念 →次:8.3 ポインターと配列

8.2.1 標準データ型のポインタ
 ポインタ変数だけを定義することはできません。ポインタはデータ型を宣言する必要があります。
FreeBASICでは、ポインタには2つの名前があります。Pointer と Ptr で、どちらも同一のポインタ変数を宣言します。
 ポインターの操作では、演算子@ または VarPtr を使って変数のアドレスを取得します。
 StrPtr は文字列アドレスを取得し、ProcPtr は関数アドレスを取得します。
 演算子* を使うと、ポインターが指すメモリー位置に格納されている実際の値にアクセスできます。

 ここで、ポインタのデータ型に注意する必要があります。 さまざまなデータ型に応じて、 ポインターが指す領域と値が異なります。
 たとえば、Short Ptrポインターは 2バイトのアドレスを指します。 値を取得するたびに 2バイトのデータしか取得できません。 アドレスの変更は毎回1ずつ増加するのではなく、毎回 2バイトのアドレスが変更されます。

文法:


例:

'FreeBASIC 学習ノート8.2.1
'Dim SymbolName As DataType {Pointer | Ptr}PCopy

Dim b As Integer = &HAA005500             'b は Integer型データ 4バイト
Dim a As Short Ptr = @b '変数bのポインタ  'a は Short型データ 2バイト

Print "    aのアドレス:" & Hex(a) & "     aの値:" & Hex(*(a)) 'aは bの下位2バイトを指します
a+ = 1
Print "  a+1のアドレス:" & Hex(a) & "   a+1の値:" & Hex(*(a)) 'aは bの上位2バイトを指します
Sleep

実行結果:(アドレスは環境によって変わります)

実行結果

 下記の結果になった場合について、下のブロック図でポインターを説明します。
実行結果
変数 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 ポインターへのポインター

 ポインタへのポインタは、通常のポインタと本質的な違いはありません。これまでの理解によれば、ポインタは変数であり、ポインタへのポインタも特別な変数です。 格納される値はポインタのアドレスなので、通常の変数とは違い、ポインターのみを指すことができます。
 ポインターへのポインターを使って、配列のようなポインターの配列を定義できます。 ポインターへのポインターで、指すポインターのデータにアクセスするか、ポインターが指すポインターが指すデータにアクセスすることができます。
 ここで、ポインタ値*操作は、右から左の順序で実行されることに注意してください。

構文:


例:

'Pointer to Pointer

Dim a As String = "これは文字列です"
Dim b As String Ptr = @a
Dim c As String Ptr Ptr = @b
Dim d As Integer Ptr = @a   '他のデータ型が許可されているとして定義

Print a
Print *b
Print **c
Print *d  '出力結果は文字列ではなく数字です。
          '特に理由が無い限り、操作するデータ型と同じデータ型を定義する必要があります。
Sleep

参照ブログ:http://www.office-cn.net/blog-230471-15221.html

←前:8.1 ポインタの概念 →次:8.3 ポインターと配列

いっしょに学ぼう に戻る
←リンク元に戻る プログラム開発関連に戻る

ページ歴史:2017-12-18 14:56:32
日本語翻訳:WATANABE Makoto、原文著作者:rainheart311

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

表示-非営利-継承