Como sabeis, no estoy muy puesto en delphi, pero como soy un tipo curioso me asalta una duda con respecto a la sintaxis de punteros.
Seguro que me podeis aclarar, siendo Variable un puntero, la diferencia entre:
^Variable y Variable^
PPointer y Pointer ¿Es PPointer un puntero a un puntero?
Y si Variable no es un puntero, entonces @Variable es el puntero a Variable ¿Me equivoco?.
Saludos.

[RESUELTO] Sintaxis de Punteros en delphi
Comenzado por
escafandra
, ago 09 2009 11:57
6 respuestas en este tema
#1
Escrito 09 agosto 2009 - 11:57
#2
Escrito 09 agosto 2009 - 12:09
^P -> Es un puntero hacia un dato de tipo de "Nombre del tipo" y @P -> Es una variable puntero que se le asigna a la dirección de otra variable del mismo tipo.
Saludos.
Saludos.
#4
Escrito 09 agosto 2009 - 12:35
Muchas gracias enecumene. Me ha quedado muy claro tras leer el documento Punetos en delphi. Para mi es mas clara la sintaxis en C :$
Me queda una duda con respecto al tipo PPointer: ¿Que diferencia existe en tre el tipo Pointer y el PPointer?
Si en C/C++ esto es así:
¿En delphi equivale a esto o me equivoco?:
Saludos.
Me queda una duda con respecto al tipo PPointer: ¿Que diferencia existe en tre el tipo Pointer y el PPointer?
Si en C/C++ esto es así:
cpp
void* P; // es un puntero genérico en C void** P; // es un puntero a un puntero genérico en C
¿En delphi equivale a esto o me equivoco?:
delphi
P: Pointer; // es un puntero Genérico en delphi P: PPointer; // ¿es un puntero a un puntero Genérico en delphi?
Saludos.
#5
Escrito 09 agosto 2009 - 12:43
PPointer no existe en delphi, lo que se me ocurre que puedes hacer lo siguiente:
Saludos.
delphi
type PPointer = ^Pointer;
Saludos.
#6
Escrito 09 agosto 2009 - 12:57
PPointer no existe en delphi....

Sin embargo esto compila:
delphi
var p: integer; p1: PPointer; p2: Pointer;
y si hago esto:
delphi
p := 1; p1 := @p; // p1 toma la dirección de p y p1^ pasa a valer 1 p2 := @p; // p1 toma la dirección de p pero p2^ no tiene valor (según Watch List)
Saludos.
#7
Escrito 09 agosto 2009 - 01:48
Bueno, tras unas pruebas me ha dado cuenta de que efectivamente
Pointer es un puntero genérico
PPointer es un puntero a un puntero genérico
Me confundía que el compilador me dejaba asignar a un PPointer cualquier dirección aunque no fuese la de un puntero, eso no ocurre en C que es mas rígido, saltando un error en tiempo de compilación.
En delphi sería así:
y si hago esto:
[off-topic]Cuando respondes un mensaje, ya no funcionan los botones que te permitían citar sobre las anteriores respuestas que aparecen debajo, llevo tiempo observándolo
[/off-topic]
Muchas gracias enecumene.

Saludos.
Pointer es un puntero genérico
PPointer es un puntero a un puntero genérico
Me confundía que el compilador me dejaba asignar a un PPointer cualquier dirección aunque no fuese la de un puntero, eso no ocurre en C que es mas rígido, saltando un error en tiempo de compilación.
En delphi sería así:
delphi
var p: integer; p1: PPointer; p2: Pointer;
y si hago esto:
delphi
p := 1; p := 1; p2 := @p; // p2 toma el valor de la dirección la variable p p1 := @p2; // p1 toma el valor de la dirección del puntero p2 asi que integer(p2^) vale 1
[off-topic]Cuando respondes un mensaje, ya no funcionan los botones que te permitían citar sobre las anteriores respuestas que aparecen debajo, llevo tiempo observándolo

Muchas gracias enecumene.


Saludos.