Para obtener obtener la dirección de algo, utilice el operador @
o la función Addr
. Ya has demostrado el uso correcto de eso. Obtuvo la dirección de iValue
y la almacenó en iptrValue
.
Para mostrar una dirección, puede usar la función Format
para convertir un valor de puntero en una cadena. Utilice la cadena %p
formato:
Edit1.Text := Format('%p -> %p -> %d', [@iptrValue, iptrValue, iptrValue^]);
que mostrará la dirección de la variable iptrValue
, a continuación, la dirección almacenada en esa variable, y luego el valor almacenado en esa dirección.
La declaración de la variable iptrValue
reserva algunos bytes en memoria y asocia un nombre con ellos. Supongamos que la dirección del primer byte es $00002468
:
iptrValue
+----------+
$2468: | |
+----------+
La declaración iValue
se reserva otra pieza de la memoria, y es probable que sea adyacente a la memoria de la declaración anterior. Desde iptrValue
es de cuatro bytes de ancho, la dirección de iValue
sería $0000246C
:
iValue
+----------+
$246c: | |
+----------+
Las cajas que he dibujado están vacías por ahora porque no hemos hablado de qué valores tienen esas variables. Solo hemos discutido las direcciones de las variables.Ahora que el código ejecutable: Usted escribe @iValue
y almacenar el resultado en iptrValue
, para que pueda obtener esto:
iptrValue
+----------+ +----------+
$2468: | $246c |--->| |
+----------+ +----------+
iValue
+----------+
$246c: | |
+----------+
Next, you assign 32342 to `iValue`, so your memory looks like this:
iptrValue
+----------+ +----------+
$2468: | $246c |--->| 32342 |
+----------+ +----------+
iValue
+----------+
$246c: | 32342 |
+----------+
Por último, al mostrar los resultados de la función Format
desde arriba, que se vería este valor:
00002468 -> 0000246C -> 32342
GetAddressOf no existe. fue pseudocódigo como se establece en "en realidad" :) – Acron