elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Problemas con punteros en listas.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problemas con punteros en listas.  (Leído 6,148 veces)
samur88

Desconectado Desconectado

Mensajes: 125


Ver Perfil
Problemas con punteros en listas.
« en: 4 Enero 2011, 03:00 am »

Saludos.

Tengo la siguiente duda:
Tengo el siguiente codigo fuente de una lista circular:

Código:

#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 Desconectado

Mensajes: 375


Ver Perfil
Re: Problemas con punteros en listas.
« Respuesta #1 en: 4 Enero 2011, 04:42 am »

Tienes que usar paréntesis!!!

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. typedef struct listacompleta {
  5.         int dato;
  6.         struct listacompleta *next;
  7.        }lista;
  8.  
  9.  
  10. void add_nod(lista **nodoe, int dato){
  11. lista *nuevo,*aux;
  12. nuevo = (lista *) malloc (sizeof(lista));
  13. nuevo->dato = dato;
  14. aux = *nodoe;
  15. if(*nodoe == NULL ){
  16.             nuevo->next = nuevo;
  17.             *nodoe = nuevo;
  18.            } else{
  19.               *nodoe = (*nodoe)->next;
  20.               nuevo->next = aux->next;
  21.               aux->next = nuevo;
  22.              }
  23. }
  24.  
  25.  
  26.  
  27. int main(){
  28. lista *nodoe;
  29. nodoe = NULL;
  30.  
  31. add_nod(&nodoe,8);
  32. add_nod(&nodoe,2);
  33. add_nod(&nodoe,3);
  34. add_nod(&nodoe,5);
  35.  
  36. system("pause");
  37. return 0;
  38.  
  39. }


En línea

samur88

Desconectado Desconectado

Mensajes: 125


Ver Perfil
Re: Problemas con punteros en listas.
« Respuesta #2 en: 4 Enero 2011, 13:23 pm »

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 Desconectado

Mensajes: 375


Ver Perfil
Re: Problemas con punteros en listas.
« Respuesta #3 en: 4 Enero 2011, 14:16 pm »

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 Desconectado

Mensajes: 125


Ver Perfil
Re: Problemas con punteros en listas.
« Respuesta #4 en: 7 Enero 2011, 16:13 pm »

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 Desconectado

Mensajes: 392

Odio las ranas.


Ver Perfil
Re: Problemas con punteros en listas.
« Respuesta #5 en: 7 Enero 2011, 16:51 pm »

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  :laugh: , espero que te sirva la explicacion

Saludos!
En línea

samur88

Desconectado Desconectado

Mensajes: 125


Ver Perfil
Re: Problemas con punteros en listas.
« Respuesta #6 en: 10 Enero 2011, 00:09 am »

Muchísimas gracias creo que ya entendí todo : )
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
listas enlazadas problemas resueltos todo un paquete de 13 problemas
Java
fiisi 4 55,715 Último mensaje 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 Último mensaje 12 Septiembre 2010, 01:49 am
por Gerik
problemas con punteros
Programación C/C++
m@o_614 5 2,717 Último mensaje 14 Enero 2012, 12:10 pm
por Xandrete
Punteros y ¿Listas?
Programación C/C++
jfap45 3 2,160 Último mensaje 3 Agosto 2012, 22:03 pm
por twins
Manejo de listas y punteros
Programación C/C++
PipeCR 2 2,253 Último mensaje 16 Septiembre 2016, 07:18 am
por PipeCR
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines