![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
una pregunta un tanto tonta
tengo una duda estoy con delphi 7 y estoy examinando un codigo
no logro entender para que se usa el simbolo ^ e buscado en google en otros lugares y no encuentro para que se usa... he leido del triangulo de pascal y no estoy seguro sea eso ... muchas gracias por su pronta respuesta |
#2
|
||||
|
||||
Hola Marthian y bienvenido a Club Delphi
![]() Cuando el símbolo ^ aparece precediendo a un tipo de dato, indica que es un apuntador a ese tipo de dato, por ejemplo:
Cuando aparece despues, desreferencia el puntero, es decir devuelve el valor almacenado en la posición de memoria a la cuál apunta. Un ejemplo sencillo: Delphi trae predefinidos punteros a los tipos mas comunes. Algunos son: PAnsiString, PString, PCurrency, PDouble, PInteger, ... (más información en la ayuda de Delphi). Un saludo.
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#3
|
||||
|
||||
Hola
Quien iba a decir que ese techito significaba todo eso, muy interesante. Algo mas que he aprendido sin querer queriendo. ![]() Saludos
__________________
Siempre Novato |
#4
|
|||
|
|||
![]() okey... muchas gracias por responderme..
pero tengo ahora tal curiosidad su función es apuntar a un puntero de la pila tal cual como se hace en el viejo asm????? que beneficios nos trae como programador... ![]() por que si puedo decir pi^= p2 y a ambos le coloco una simplicidad como = 5 para que matarse con los punteros si puedo decir que a = 5 y b = 6???? no comprendo realmente ![]() |
#5
|
||||
|
||||
Un poquito de teoria
Es para usar la memoria de manera optima.
Cuando se definen variables de tipo puntero, estas no ocupan espacio de memoria hasta que no se le diga explicitamente (NEW). Así mismo cuando ya no necesitamos la variable, la podemos liberar (Dispose). Por otro lado cuando definimos una variable "normal", esta reserva su espacio de memoria durante todo el tiempo que el programa (o procedimiento) se esté ejecutando.
|
#6
|
||||
|
||||
Cita:
Si quieres entender el funcionamiento del ^ ve a un libro que trate sobre Estructuras de datos y algoritmos cuyos ejemplos estén hechos en Turbo Pascal. Cualquiera que haya cursado y practicado alguna cátedra de Estructuras de Datos definiendo arrays, listas, colas, pilas, árboles y grafos con punteros se volvería mono de ver lo que es capaz ese único símbolo. ¡Que prácticas tortuosas aquellas! ![]() ![]() Como dato: En Delphi ya no es necesario utilizar ^, a menos que se declare propiamente algún puntero como los que vienen de "fábrica" y menciona ecfisa. Es lo mismo:
que:
Si en verdad no vas a trabajar con punteros, y ni siquiera con algunos propios que definas, mejor no te rompas la cabeza. Dale gracias a Delphi que se encarga del trabajo sucio y no tienes que tocar punteros aquí y allá... al menos no conscientemente. Pero si en verdad quieres aprender, practica llevando el concepto siguiendo ejemplos y ejercicios de TADs. Saludos, |
#7
|
||||
|
||||
Cita:
En este caso específico, obviamente no conlleva ningún beneficio. Pero dado que tenías total desconocimiento de la función del caret en Pascal, me pareció apropiado hacer incapié en la simplicidad del ejemplo. Saludos.
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#8
|
||||
|
||||
Cita:
Si quieres empezar a utilizar punteros, empieza por algo sencillo, coge algún .pas de delphi y buscar ^ veras que hay bastantes y estudia de donde viene y a donde va, cómo se asigna un valor a un puntero, etc... Un saludo
__________________
Al hacer una consulta SQL, haz que los demás te entiendan y disfruten de ella, será tú reflejo de tú saber. |
#9
|
||||
|
||||
Conocer el funcionamiento de los punteros es esencial para un programador.
Distinto es que el lenguaje que use después lo permita usar, lo haga innecesario o no le haga falta. Pero manejarlos perfectamente es básico. Un programador que no sabe usar punteros... no es un programador.
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#10
|
||||
|
||||
Cita:
Supon que existe este codigo:
Imagina que la memoria de un computador es exactamente como una hoja de Excel, que al principio esta vacia y es aleatoria (porque en excel pones valores donde te da la gana. Si estan organizados es cosa tuya). Ahora bien, si pones tu nombre en una celda, veras que realmente esa celda es "A1". "A1" es la dirección del valor de tu nombre. Sin embargo, tu diras: MOMENTO ESO NO TIENE SENTIDO! porque el nombre esta dentro de una variable (A1)! Aja, pero y DONDE esta esa variable? En *otra* celda! Como asi? En Excel (osea, la memoria) tendrias esto: B1 A1 Nombre Marthian Asi, que en este caso, el *valor* esta en A2 pero la *variable* (que es como la etiqueta del valor) esta en B1. El *apuntador* es como interrogar esa indireccion, donde en la memoria si pregunto "Nombre"=B1 realmente quiero es "Marthian"=A2. Eso es lo que se quiere el 99% de las veces. Pero que pasa si quiero no el valor pero si la celda donde esta la vble (B2), entonces uso el sombrerito. El *porque* es una cosa bizarra. Basicamente, es para hacer "trucos". Por ejemplo, para hacer un virus. Digamos que en B1 esta el código que ejecuta un programa: B1= RUN NotePad.exe (Lo real) A1= NotePad.exe (Solo el nombre) (que conste que eso que escribi no tiene mucho sentido) Ahora, tu virus pregunta: Dame B1. Pero el compilador responde: NotePad.exe. NO! yo quiero hacer un virus!, asi que tu preguntas: Dime ^B1. El te responde "RUN NotePad.exe". Ahora tu dices: Cambia ^B1 por "RUN BorrarDisco.exe", que es como quien dice, un trastorno. Ahora has cambiado la realidad interna de lo que la memoria tiene. Entonces, si preguntan: A1, responde "NotePad.exe", pero realmente ejecuta "RUN BorrarDisco.exe". --- Los casos de uso en Delphi mas comunes los puedes leer aqui: http://delphi.about.com/od/objectpas...a/pointers.htm Como un apuntado permite "mover" los valores de una vble(etiqueta) a otra: http://www.delphibasics.co.uk/RTL.asp?Name=Pointer
Como ves, la forma estaba almacenada en una vble, pero se le cambio la direccion de su etiqueta a otra celda, usando los apuntadores. P.D Aunque use pointers algunas veces, solo me alcanzo el nirvana hace unos meses tratando de explicar como funcionaba las vables. Si no fuera por excel, estaria frito ![]()
__________________
El malabarista. |
![]() |
|
|
![]() |
||||
Tema | Autor | Foro | Respuestas | Último mensaje |
pregunta tal vez tonta | android_beat | Varios | 2 | 29-08-2005 17:27:26 |
pregunta tonta | Jordy | Conexión con bases de datos | 10 | 10-06-2005 20:37:04 |
Pregunta Tonta | Mario1980 | Varios | 1 | 30-10-2004 16:36:14 |
Pregunta tonta | Delphos | Varios | 10 | 20-01-2004 12:44:44 |
Pregunta tonta... | CFPA86 | Varios | 3 | 04-12-2003 19:46:43 |
![]() |
|