何かのアドレスを取得@
するには、演算子またはAddr
関数を使用します。あなたはすでにそれを正しく使用していることを実証しました。のアドレスを取得し、iValue
に保存しましたiptrValue
。
アドレスを表示Format
するには、関数を使用してポインター値を文字列に変換します。%p
次のフォーマット文字列を使用します。
Edit1.Text := Format('%p -> %p -> %d', [@iptrValue, iptrValue, iptrValue^]);
これにより、変数のアドレス、iptrValue
その変数に格納されているアドレス、そのアドレスに格納されている値が表示されます。
変数宣言はiptrValue
、メモリ内にいくつかのバイトを予約し、それらに名前を関連付けます。最初のバイトのアドレスを次のように仮定します$00002468
。
iptrValue
+----------+
$2468: | |
+----------+
iValue
宣言は別のメモリを予約しており、おそらく前の宣言のメモリに隣接しています。iptrValue
は 4 バイト幅なので、 のアドレスは次のiValue
ようになります$0000246C
。
iValue
+----------+
$246c: | |
+----------+
これらの変数が保持する値についてはまだ説明していないため、私が描いたボックスは今のところ空です。変数のアドレスについてのみ説明しました。実行コードに移りましょう。@iValue
結果を に書き込んで保存するとiptrValue
、次のようになります。
iptrValue
+----------+ +----------+
$2468: | $246c |--->| |
+----------+ +----------+
iValue
+----------+
$246c: | |
+----------+
Next, you assign 32342 to `iValue`, so your memory looks like this:
iptrValue
+----------+ +----------+
$2468: | $246c |--->| 32342 |
+----------+ +----------+
iValue
+----------+
$246c: | 32342 |
+----------+
最後に、Format
上記の関数の結果を表示すると、次の値が表示されます。
00002468 -> 0000246C -> 32342