Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 25-11-2006
[David] David is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Málaga
Posts: 417
Poder: 24
David Va por buen camino
El error me da en la función obviamente , si quito el ^ , pero el caso es por que .

Os voy a poner otro ejemplo .

Tengo este código :

Código Delphi [-]
TClase = class
public
icampo : Real;
end;

procedure loquesea(clase:TClase);
var
ivalor : ^Real;
begin 

 ivalor := @Clase.icampo;
end;

Mi pregunta , cual es la diferencia con este otro código :

Código Delphi [-]
TClase = class
public
icampo : Real;
end;

procedure loquesea(clase:TClase);
var
ivalor : Real;
begin
    Clase := TClase.Create;
    ivalor := Clase.icampo;

end;
Saludos
Responder Con Cita
  #2  
Antiguo 25-11-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 26
seoane Va por buen camino
Código Delphi [-]
var
  ivalor : ^Real;
begin 
   ...
  ivalor := @Clase.icampo;

Aquí estas asignando a la variable ivalor la posición de memoria que ocupa la variable icampo.

Código Delphi [-]
var
  ivalor : Real;
begin
   ...    
  ivalor := Clase.icampo;

Aquí sin embargo estas asignando el valor de la variable icampo a la variable ivalor.


Vamos a ver si puedo ponerte un ejemplo sobre punteros:
Código Delphi [-]
var
  i: integer;
  p: ^integer;
begin
  // Aqui asignamos a la variable i el valor 5
  i:= 5;
  // Aqui asignamos a p la direccion de la variable i,
  // para eso utilizamos el operador @
  p:= @i;
  // Ahora vamos a cambiar el valor de i,
  // en este caso el operador ^ inica que queremos
  // acceder a la posicion de memoria a la que apunta p
  p^:= 10;
  // comprobamos que el valor de i a cambiado
  ShowMessage(IntToStr(i));
end;

Espero no haberte liado mas
Responder Con Cita
  #3  
Antiguo 25-11-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 31
Lepe Va por buen camino
A ver si lo termino de complicar o simplificar:
Primero:
Todas las variables se guardan en una dirección de RAM (no todas... pero bueno, aceptamos barco) y la estructura de ram podría asemejarse a esto:
Código:
DIRECCION RAM	NOMBRE VARIABLE		VALOR DE LA MEMORIA	
 200		  i			5
 300		  p			200
Cuando dice i:=5, la variable i se guarda en la dirección 200 de la ram, se accede a esa dirección y se cambia el contenido por un 5.

Cuando dice p := @i se mira donde está la variable "p" que es la dirección 300. Ahora en el valor de la memoria, se debe escribir "la dirección de "i" (por aquello del operador @), y se guarda el 200.

Cuando se accede con p^:= 10 el compilador busca la variable "p", que está en la dirección 300, y a partir de ahí, (como está el operador ^) se trata el contenido de la memoria como una dirección de memoria, o sea, se mira el valor de la memoria (el 200) y como está el operador ^, ahora se busca en la dirección 200 de la memoria, se capta el valor que haya, (el 5) y se sustituye por el 10. Esto si no recuerdo mal se llamaba "modo de direccionamiento indirecto"

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.

Última edición por Lepe fecha: 25-11-2006 a las 18:15:52.
Responder Con Cita
  #4  
Antiguo 25-11-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por David
El error me da en la función obviamente
Hombre, si es tan obvio no entiendo por qué preguntas.

// Saludos
Responder Con Cita
  #5  
Antiguo 25-11-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Yo por el contrario diría que en Delphi prácticamente no hay necesidad de usar apuntadores. Cierto que si debemos trabajar con funciones de la API, los necesitaremos y nunca está de más conocerlos y saber usarlos. Pero una gran parte de los casos, no verás apuntadores en tus aplicaciones, a menos, claro, que intencionalmente quieras usarlos

// Saludos
Responder Con Cita
  #6  
Antiguo 25-11-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 26
seoane Va por buen camino
Cita:
Empezado por roman
Yo por el contrario diría que en Delphi prácticamente no hay necesidad de usar apuntadores. Cierto que si debemos trabajar con funciones de la API, los necesitaremos y nunca está de más conocerlos y saber usarlos. Pero una gran parte de los casos, no verás apuntadores en tus aplicaciones, a menos, claro, que intencionalmente quieras usarlos

// Saludos
Tienes razón, si no quieres no tienes porque usar un solo puntero en una aplicación de Delphi. De hecho estaba intentando buscar un ejemplo para poner en mi mensaje anterior, y no encontré nada que se pudiera hacer con punteros y no se pudiera hacer con otro de los recursos de que dispone Delphi (arrays dinámicos, streams, strings, etc ...). Pero el caso, es que internamente lo único que hacen esas herramientas es manejar los punteros por nosotros, y a veces, lo que apetece es bajar un poco y manejar las cosas uno mismo. Aunque por lo visto a mi me suele apetecer mas de lo normal
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Problemas con punteros Victor_TlrSoft Varios 4 01-02-2006 16:57:46
Punteros davitcito Varios 2 25-04-2005 22:46:24
Punteros y Variables Flores OOP 7 23-04-2005 22:09:55
Punteros rafadrover OOP 8 18-09-2003 10:09:47


La franja horaria es GMT +2. Ahora son las 02:31:55.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi