Autor
|
Tema: Problemas con punteros en listas. (Leído 6,148 veces)
|
samur88
Desconectado
Mensajes: 125
|
Saludos. Tengo la siguiente duda: Tengo el siguiente codigo fuente de una lista circular: #include <stdio.h> #include <stdlib.h>
typedef struct listacompleta { int dato; struct listacompleta *next; }lista;
void add_nod(lista **nodoe, int dato){ lista *nuevo,*aux; nuevo = (lista *) malloc (sizeof(lista)); nuevo->dato = dato; aux = *nodoe; if(*nodoe == NULL ){ nuevo->next = nuevo; *nodoe = nuevo; } else{ /* *nodoe = *nodoe->next; */ nuevo->next = aux->next; aux->next = nuevo; } }
int main(){ lista *nodoe; nodoe = NULL; add_nod(&nodoe,8); add_nod(&nodoe,2); add_nod(&nodoe,3); add_nod(&nodoe,5);
system("pause"); return 0;
}
El caso es que dentro de add_nod la linea que esta comentada no me compila, pero me gustaría avanzar en uno el elemento nodoe para agregar elementos a partir del ultimo insertado en la lista circular, como puedo hacer eso y por que me da error al compilar, me he mirado el error y creo que es porque es un puntero de puntero, pero no se como solucionarlo. Un saludo y gracias a todos.
|
|
|
En línea
|
|
|
|
Ferno
Desconectado
Mensajes: 375
|
Tienes que usar paréntesis!!! #include <stdio.h> #include <stdlib.h> typedef struct listacompleta { int dato; struct listacompleta *next; }lista; void add_nod(lista **nodoe, int dato){ lista *nuevo,*aux; nuevo = (lista *) malloc (sizeof(lista )); nuevo->dato = dato; aux = *nodoe; if(*nodoe == NULL ){ nuevo->next = nuevo; *nodoe = nuevo; } else{ *nodoe = (*nodoe)->next; nuevo->next = aux->next; aux->next = nuevo; } } int main(){ lista *nodoe; nodoe = NULL; add_nod(&nodoe,8); add_nod(&nodoe,2); add_nod(&nodoe,3); add_nod(&nodoe,5); return 0; }
|
|
|
En línea
|
|
|
|
samur88
Desconectado
Mensajes: 125
|
Muchas gracias Discúlpame ¿Podrías decirme o explicarme por que uso el paréntesis? es que no conocía esa nomenclatura al usar punteros. Un saludo y Feliz Año Nuevo.
|
|
|
En línea
|
|
|
|
Ferno
Desconectado
Mensajes: 375
|
Bueno, es que al desreferenciar dicha variable sin paréntesis estás desreferenciando nodoe->next, y lo que tu quieres desreferenciar es solo nodoe, el cual es un puntero a puntero de struct. Tu quieres hacer: (**nodoe).next == (*nodoe)->next. Si le quitas los paréntesis, es como hacer *(nodoe->next) lo cual es un error porque no existe ningún campo en la variable (*nodoe) ya que es sólo un puntero a struct (debes desreferenciar solamente nodoe nuevamente para acceder a la struct correspondiente y al campo next en ella).
Espero que se haya entendido! Salú!
|
|
|
En línea
|
|
|
|
samur88
Desconectado
Mensajes: 125
|
Muchas gracias por contestar, y disculpa la tardanza estos día con las fiestas en la familia no he podido conectarme mucho, con desreferenciar quieres decir quitar el puntero a puntero, para acceder a el, no? Si es así creo que lo he entendido todo, lo que no entiendo muy bien es el concepto de desreferenciar. Un saludo y gracias de nuevo
|
|
|
En línea
|
|
|
|
Oblivi0n
Desconectado
Mensajes: 392
Odio las ranas.
|
Cuando desreferencias (aplicando * antes de la variable) accedes a la direccion de memoria de dicha variable, al hacer (*nodoe)->next, accedes a la direccion de memoria de nodoe, si no utilizas parentesis accedecias a la direccion de memoria de nodoe->next Creo que no me he equivocado , espero que te sirva la explicacion Saludos!
|
|
|
En línea
|
|
|
|
samur88
Desconectado
Mensajes: 125
|
Muchísimas gracias creo que ya entendí todo : )
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
listas enlazadas problemas resueltos todo un paquete de 13 problemas
Java
|
fiisi
|
4
|
55,715
|
9 Junio 2009, 02:25 am
por sapito169
|
|
|
Ayuda Acerca De Listas y Listas Circulares (Revienta Memoria :S)
Programación C/C++
|
Gerik
|
0
|
5,971
|
12 Septiembre 2010, 01:49 am
por Gerik
|
|
|
problemas con punteros
Programación C/C++
|
m@o_614
|
5
|
2,717
|
14 Enero 2012, 12:10 pm
por Xandrete
|
|
|
Punteros y ¿Listas?
Programación C/C++
|
jfap45
|
3
|
2,160
|
3 Agosto 2012, 22:03 pm
por twins
|
|
|
Manejo de listas y punteros
Programación C/C++
|
PipeCR
|
2
|
2,253
|
16 Septiembre 2016, 07:18 am
por PipeCR
|
|