• Miércoles 15 de Mayo de 2024, 23:23

Autor Tema:  Otroa Vez La Memoria!!!  (Leído 1140 veces)

Miguelencho

  • Miembro activo
  • **
  • Mensajes: 53
    • Ver Perfil
Otroa Vez La Memoria!!!
« en: Miércoles 12 de Mayo de 2004, 22:15 »
0
Bien amigos recuerdan que hace unos dias les pregunte como encontraba la posicion de memoria de una variable, bueno ya eso lo se hacer pero solo para impresiones.

Necesito recoger ese dato para almacenarlo en una variable, hay alguna funcion, por que ok averiguo la posicion de esta manera


printf("Posicion en memoria: %p, &t);

bien pero alli tengo un impresion, si yo quiesiera recoger ese valor para hacer una operacion con el que podria hacer, intente asignarle el valor a una variable pero eso me cambia totalmente el numero o se por lo menos si la posicion es 65000 me devuelve un valor totalmente diferente, 126 para ser exacto, entonces creo que eso esta mal.

Si alguien sabe de alguna funcion que me recoja el valor de la posicion en una variable por favor me avisa y si no como puedo hacer eso......tengo la posicion pero solo en impresion... :unsure:
"The difference between the dreams and the accomplishment, is pure desire"

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Otroa Vez La Memoria!!!
« Respuesta #1 en: Jueves 13 de Mayo de 2004, 16:09 »
0
no entendi... :(

podrias explicarte mejor?
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

patitofeo

  • Miembro MUY activo
  • ***
  • Mensajes: 145
    • Ver Perfil
Re: Otroa Vez La Memoria!!!
« Respuesta #2 en: Jueves 13 de Mayo de 2004, 17:19 »
0
No se si entendí bien pero creo que lo que pretendes es trabajar con la dirección de memoria en la que se almacena una variable en memoria ¿no?

es decir si tu declaras una variable como por ejemplo.


Código: Text
  1. int var;
  2.  


lo que quieres es poder trabajar con la direccion en la que el compilador la almacena ¿voy bien?

la misma que se imprime con:

Citar
printf("Posicion en memoria: %p, &t);


Para hacer esto existe lo que se llaman punteros que es una forma de declarar variables no por valor si no mediante la direccion que las contiene.

deberias definir la variable como:

Código: Text
  1. int *var;
  2.  


de forma que "var" ahora contiene la direccion de memoria.

Por supuesto para poder asignar luego un valor que almacenar en esa direccion deberas guardar espacio con la funcion malloc

Código: Text
  1. var=malloc(sizeof(int));
  2.  

y para asignar el valor debes aclarar que quieres acceder al contenido con * de nuevo.

ejemplo:

Código: Text
  1. var=123;
  2.  


dice que la variable var contendra lo que halla en la direccion de memoria 123.

Código: Text
  1. *var=123;
  2.  


dice que la variable var que apunta a la direccion que tenga contiene el valor 123.

 :brickwall:     :whistling:

Mucho rollo ¿no?

te recomiendo que mires algun manual sobre punteros que te lo esplicaran mejor que yo.


Existe otro método de conocer el valor de la direccion. que es con el operador &.

igual que en el printf que tenias antes


Citar
printf("Posicion en memoria: %p, &t);


la variable definida de forma normal "t" queda modificada y con este operador se devuelve su dirección.

Puedes guardarla despues en una variable del tipo long por ejemplo:

Código: Text
  1.  
  2. {
  3. ...
  4. int t;
  5. long direc;
  6.  
  7. direc=&t;
  8.  
  9. ...
  10. }
  11.  
  12.  


 :devil:

direc ahora contendra el valor de la direccion de t.


Bueno ante todo espero que esta fuera tu duda y que no te este dando la chapa.

dime si te ayudó

saludos

 :adios: