Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: AXA en 21 Octubre 2021, 17:18 pm



Título: Punteros concatenados. Como guardar una direccion de memoria?
Publicado por: AXA en 21 Octubre 2021, 17:18 pm
No encuentro forma de guardar una dir de memoria. yo intente.
Y obviamente no guarda las direcciones.
Como hago para guardar una direccion y leerla?.

class clist { public: clist *pred,*post }

clist *pr,*po;

void new(clist *l)
{
 clist l1,l2;
 l1=malloc(sizeof(l1));
 l2=malloc(sizeof(l2));
 clist ll;
 ll.pred=NULL;
 ll.post=l2;
 *l1=ll;
 ll.pred=l1;
 ll.post=NULL;
 *l2=ll;
 l=l1;
 pr=l1;
 po=l2;
}

main ()
{
 clist *l;
 new(l);
 clist ll;
 ll=*l;
 if (l.post==po) printf("todo bien");
 else printf("todo mal");
 getch();
}



Título: Re: Punteros concatenados. Como guardar una direccion de memoria?
Publicado por: Eternal Idol en 21 Octubre 2021, 17:51 pm
Tenes que pasar el puntero como referencia o doble puntero. Mejor explicado aca:
http://conclase.net/c/curso/cap15

Ejemplo de como lo estas haciendo y como podria funcionar, en error l es una variable local pasada por valor:
Código
  1. #include <cstdio>
  2.  
  3. void error(int *l)
  4. {
  5. l = new int;
  6. }
  7.  
  8. void reserva(int **l)
  9. {
  10.  *l = new int;
  11. }
  12.  
  13. void main ()
  14. {
  15. int *m1 = nullptr;
  16. int *m2 = nullptr;
  17. error(m1);
  18. reserva(&m2);
  19. printf("%p %p\r\n", m1, m2);
  20. }


Por cierto tu codigo no compila ni a palos, no podes llamar new a una funcion en C++ al ser una palabra clave (y no podes usar class en C ...).


Título: Re: Punteros concatenados. Como guardar una direccion de memoria?
Publicado por: AXA en 22 Octubre 2021, 02:48 am
Muchas gracias IDOL. Queria preguntarte que C++ usas. Yo instale dos que encontre gratis para windows. Uno es el free c++ y el otro es el 5.2 de borland. Pero no tiene graphics.h . Hay otra forma de iniciar la alta resolucion? u otro c++?


Título: Re: Punteros concatenados. Como guardar una direccion de memoria?
Publicado por: Eternal Idol en 22 Octubre 2021, 08:36 am
Visual C++: https://docs.microsoft.com/en-us/cpp/?view=msvc-160

Podes usar DirectX, OpenGL o Vulkan por ejemplo pero mejor concentrate en aprender los fundamentos basicos del lenguaje y ya con el tiempo decidiras que API usar.


Título: Ayuda
Publicado por: AXA en 23 Octubre 2021, 01:16 am
No consigo entender como funciona. Si me mandas resuelto lo que quiero hacer te lo agradeceria mucho. Yo nocesito enlazar...

class clist { public:
                           clist pred,post;
                           char data[20];
}

yo programaba en pascal y es muy facil. pero aca no tengo idea.
basicxamente deberia ser
clist l;
l=l.post; y salta al siguiente. Como hago aca?. el int ** no lo supe usar bien te mando lo que intente hacer. Ademas vi que solo es un desplazamiento. no conserva segmento y desplazamiento. yo nocesito mucha memoria. Hice un lisp en pascal, el lenguaje de inteligencia artificial, estoy aprendiendo a usarlo con un agedres y vi que el c en windows es rapidicimo. En pascal un contador en un segundo llega a 20 millones y aca a 5 billines que pareciera ser mas rapido de lo que dan los hrzs.Mejor. Pero estoy atado a hacer una cadena de punteros para seguir. el resto ya se lo suficiente.
Entendes lo que necesito?
Yo tengo que hacer un nuevo clist , cargar el data y leerlo. enlazar en pred el clist anterior y
en el anterior el nuevo.
Yo pensaba usar lo que me distes pero no funciona como pareceria.
en pasacal vos tenes variables pointer y punteros. todos son seg y ofs.
type
      clist = object
                         pred,post:pointer;
                         data:string[20];   
      end;
var
     l,ln:=*clist;
begin
        new(l);
        l.data="uno";
        l.pred=nil;
        new(ln);
        ln.data="dos";
        ln.pred=l;
        ln.post=nil;
        while *l.post<>nil do begin
                 write(*l.data);
                 l=*l.post;
        end;
end.
Esto es lo que necesito en c. Si me lo das siguo sin problemas.
En pascal no es *, es el triangulo hacia arriba que no lo encuento. Pero basicamente
l es un pointer (segmento,desplazamiento). *l es el contenido o se asigna al contenido.
Te pido encarecidamente que me des un ejemplo resuelto porque no lo voy a sacar sola.
Y el objetivo es la inteligencia artificial que me gusta usar la que hago yo.
Un beso. ;-)
     
 


Título: Re: Punteros concatenados. Como guardar una direccion de memoria?
Publicado por: Eternal Idol en 23 Octubre 2021, 08:06 am
No se hacen tareas, lo que yo te mande logra cambiar la direccion a la que apunta el puntero declarado en main desde otra funcion y punto.