Ir al contenido


Foto

[RESUELTO] Sintaxis de Punteros en delphi


  • Por favor identifícate para responder
6 respuestas en este tema

#1 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 09 agosto 2009 - 11:57

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.
  • 0

#2 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

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.
  • 0

#3 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 09 agosto 2009 - 12:14

Aquí­ hay algo más claro sobre los Punteros :D
  • 0

#4 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

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í­:


cpp
  1. void*  P; // es un puntero genérico en C
  2. void** P; // es un puntero a un puntero genérico en C



¿En delphi equivale a esto o me equivoco?:


delphi
  1. P: Pointer;  // es un puntero Genérico en delphi 
  2. P: PPointer; // ¿es un puntero a un puntero Genérico en delphi? 



Saludos.

  • 0

#5 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 09 agosto 2009 - 12:43

PPointer no existe en delphi, lo que se me ocurre que puedes hacer lo siguiente:



delphi
  1. type
  2.   PPointer = ^Pointer;



Saludos.
  • 0

#6 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 09 agosto 2009 - 12:57

PPointer no existe en delphi....

:s

Sin embargo esto compila:


delphi
  1. var
  2.   p: integer;
  3.   p1: PPointer;
  4.   p2: Pointer;



y si hago esto:


delphi
  1.   p := 1;
  2.   p1 := @p; // p1 toma la dirección de p y p1^ pasa a valer 1
  3.   p2 := @p; // p1 toma la dirección de p pero p2^ no tiene valor (según Watch List)



Saludos.
  • 0

#7 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

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í­:


delphi
  1. var
  2.   p: integer;
  3.   p1: PPointer;
  4.   p2: Pointer;



y si hago esto:


delphi
  1.   p := 1;
  2.   p  := 1;
  3.   p2 := @p;  // p2 toma el valor de la dirección la variable p
  4.   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  :( [/off-topic]

Muchas gracias enecumene(y) :D

Saludos.
  • 0




IP.Board spam blocked by CleanTalk.