要获取某物的地址,请使用@
运算符或Addr
函数。你已经证明了它的正确使用。您获得了 的地址iValue
并将其存储在iptrValue
.
要显示地址,您可以使用该Format
函数将指针值转换为字符串。使用%p
格式字符串:
Edit1.Text := Format('%p -> %p -> %d', [@iptrValue, iptrValue, iptrValue^]);
这将显示iptrValue
变量的地址,然后是存储在该变量中的地址,然后是存储在该地址的值。
变量声明在内存中iptrValue
保留了一些字节并将名称与它们相关联。假设第一个字节的地址是$00002468
:
iptrValue
+----------+
$2468: | |
+----------+
该iValue
声明保留了另一块内存,它可能与前一个声明的内存相邻。由于iptrValue
是四个字节宽,地址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