目次→
演算子→
索引演算子→
Operator [] (Pointer index)←オリジナル・サイト
メモリの、指定アドレスから、指定しただけずらしした位置の、メモリへの参照を、返します。
構文:
用法:
result = lhs [ rhs ]
または
lhs [ rhs ] = value
パラメタ:
lhs
起点とするアドレス。
rhs
lhs からずらす、符号付きの量。
T
いずれかのデータ型。
記述:
この演算子は、ベース(メモリの起点)アドレスからメモリ内のある距離の値への参照を返します。
これは、実は "
*(lhs + rhs)" の短縮表現です。
参照は、メモリ位置 "
(lhs + rhs)" を値として持つポインタと考えることができ、暗黙的に参照を外すので、どちらもまったく同じことをします。
ポインタ演算と同様に、
Any Pointer 以外では、
Pointer のどんな型にも、索引をつけることができます。
また、ポインタ演算と同様に、意味のあるデータにアクセスしていることを確認するのはユーザーの責任です。
'2-次元' ポインター (つまりT Ptr Ptr) にインデックスを付けるとき、最初(左端)のインデックスは、第2の前に、適用されます:
例えば、Pt[I1][I2] = *(Pt[I1] + I2) = *(*(Pt + I1) + I2)
一般に、'n-次元' ポインターを使う場合:
Pt[I1][I2].....[In]
インデックス順(左から右まで)は、間接参照する順番に相当します。
null ポインターの場合は、この演算子を使用しないでください。参照が定義されていない(実行時エラーを引き起こす)からです。
それ以外の場合、ユーザーは、オフセット値 (
rhs) が、有効なメモリーへのアクセスを許可する範囲内にあることを確認する必要があります。
この範囲外では、結果は未定義です。
この演算子は、適切な構文を使って、メンバー
演算子 として、ユーザー定義型のために、多重定義できます。
例:
'' 5要素の配列を初期化します
Dim array(4) As Integer = { 0, 1, 2, 3, 4 }
'' 最初の要素を示します
Dim p As Integer Ptr = @array(0)
'' ポインタ索引を使って、配列の要素を出力します
For index As Integer = 0 To 4
Print p[index];
Next
Print
Sleep
下のように表示されるでしょう。
QBからの違い:
参照: