Punteros concatenados. Como guardar una direccion de memoria?

Iniciado por AXA, 21 Octubre 2021, 17:18 PM

0 Miembros y 1 Visitante están viendo este tema.

AXA

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();
}


Eternal Idol

#1
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 (c++) [Seleccionar]
#include <cstdio>

void error(int *l)
{
l = new int;
}

void reserva(int **l)
{
 *l = new int;
}

void main ()
{
int *m1 = nullptr;
int *m2 = nullptr;
error(m1);
reserva(&m2);
printf("%p %p\r\n", m1, m2);
}



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 ...).
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

AXA

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++?

Eternal Idol

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.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

AXA

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. ;-)
     
 

Eternal Idol

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.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón