Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: GonzaloRamirez en 6 Diciembre 2019, 20:43 pm



Título: Punteros Dobles en C
Publicado por: GonzaloRamirez en 6 Diciembre 2019, 20:43 pm
Hola, alguien me puede dar una ayuda con este código de insertar ordenado en una lista? , no logro comprender el nodo** lista, por que se pasa como doble puntero? que función cumple.


void insertar_ordenado (nodo** lista, elemento e){
    nodo* actual;
    nodo* anterior;
    nodo* nuevo = malloc(sizeof(nodo));
    nuevo->e=e;
    actual=*lista;
    anterior=NULL;
    while(actual!=NULL && actual->e.dni < e.dni){
         anterior=actual;
         actual=actual->sig;
    }
    if(anterior!=NULL){
         anterior->sig=nuevo;
         nuevo->sig=actual;
    }else{
         nuevo->sig=*lista;
         *lista=nuevo;
   }
}


Título: Re: Punteros Dobles en C
Publicado por: ThunderCls en 6 Diciembre 2019, 21:51 pm
En este caso la funcion "insertar_ordenado" intentara modificar la cabeza de lista y por consiguiente dicho puntero necesita ser pasado como referencia (doble puntero), de lo contrario el puntero o nodo principal de la lista seria pasado como copia y solo se modificaria el orden de la copia de la lista dentro de dicha funcion y no la original. Una variante seria la de pasar lista como puntero simple pero retornar el nodo principal en lugar de usar void.


Título: Re: Punteros Dobles en C
Publicado por: GonzaloRamirez en 7 Diciembre 2019, 04:00 am
Muchas gracias! ya lo logre comprender, me salvaste


Título: Re: Punteros Dobles en C
Publicado por: AlbertoBSD en 7 Diciembre 2019, 06:57 am
Cuando pegues codigos deberías de colocar la funte de tu codigo, ya que se nota que lo copiaste de algun lugar... , asi mismo utilizar la etiqueta de código adecuada para que salga bien indentado.