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

FreeBASIC OpVarptr

目次演算子ポインタ演算子Operator VARPTR (Variable pointer)←オリジナル・サイト

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


数値変数やオブジェクトのアドレスを返します。
演算子 @ (のアドレス) と同じものです。

構文:
declare 演算子 VarPtr ( byref lhs as T ) as T ptr

構文:
result = VarPtr ( lhs )

パラメタ:
lhs
変数かオブジェクト。
T
任意のデータ型。

戻り値:
変数やオブジェクトのアドレスを返します。

記述:
この演算子は、演算対象のアドレスを返します。

演算対象が、String 型のとき、内部の文字列記述子のアドレスを返します。
このため、文字列データの場合は、演算子 Strptr (文字列ポインタ) を使って、アドレスを取得します。

配列を演算対象にできませんが、配列の要素を演算対象にすることはできます。
例えば、"VarPtr(myarray(0))" は、"myarray(0)" のアドレスを返します。

演算子 @ (のアドレス) を、変数かオブジェクトに使うと、VarPtr と同じ動作をします。

例:
Dim a As Integer, addr As Integer
a = 10

'' addr に、a のアドレスを代入します
addr = CInt( VarPtr(a) )

'' a の、すべての4バイト(INTEGERのサイズ)を変えます。
Poke Integer, addr, -1000
Print a

'' addr に、a のアドレスを代入します(上と同様)
addr = CInt( @a )

'' 最下位もしくは最上位のバイトを表示します。
'' 最下位か最上位かは、CPU(Motorola か Intel) のエンディアンに依存します。

Print Peek ( addr )
Sleep


例2: ポインタ演算子で取得する値
Dim As String alphab = "ABCDEFGHIJ"

Print "文字列     " ;"SAdd ポインタ " ;"StrPtr ポインタ ";"VarPtr ポインタ ";"@ ポインタ"
'Print "String", "SAdd", "StrPtr", "VarPtr", "Address of"

For i As UInteger = 0 To 9
   Print Chr(alphab[i]), SAdd(alphab), StrPtr(alphab), VarPtr(alphab[i]), @alphab[i]
Next
Print

Dim ArrayStr(15) As String
Dim i As Integer
Dim Counter As Integer

Counter = 0

Print "文字列     " ;"SAdd ポインタ " ;"StrPtr ポインタ ";"VarPtr ポインタ ";"@ ポインタ"
'Print "String", "SAdd", "StrPtr", "VarPtr", "Address of"

For i = Asc("A") To Asc("Z")-15
   Counter = Counter + 1
   ArrayStr(Counter) = Chr(i, i+1, i+2, i+3, i+4)
   Print ArrayStr(Counter) ,SAdd(ArrayStr(Counter)) ,StrPtr(ArrayStr(Counter)) ,VarPtr(ArrayStr(Counter)) ,@ArrayStr(Counter) 
Next i

Sleep


QBからの違い:
参照:
ポインタ演算子 に戻る
演算子 に戻る
←リンク元に戻る プログラム開発関連に戻る

ページ歴史:2016-12-16 01:08:50
日本語翻訳:WATANABE Makoto、原文著作者:LaananFisher

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

表示-非営利-継承