[C]Equivalencia de una referencia de C++ a C?

Iniciado por jorge.esquibel, 19 Noviembre 2018, 09:01 AM

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

jorge.esquibel

Estoy pasando un código de funciones que permiten agregar y eliminar elementos de una lista enlazada hacia "C" sin embargo me encontré con algo que no sé como reemplazar al declarar la función: void insertarLista(Nodo *&lista,int n) el "&" la referencia de la lista al quitarlo no hay error de sintaxis pero no funciona como debe de ser al emplear otra funcion "mostrar".

Este es el código en C++
Código (cpp) [Seleccionar]
#include <iostream>
using namespace std;

struct Nodo{
int dato;
Nodo *siguiente;
};
void insertarLista(Nodo *&,int);

int main(int argc, char *argv[]) {
Nodo *lista = NULL;
int dato;

cout<<"Digite un numero: ";
cin>>dato;

insertarLista(lista,dato);

return 0;
}

void insertarLista(Nodo *&lista,int n){
Nodo *nuevo_nodo = new Nodo();
nuevo_nodo->dato = n;

Nodo *aux1 = lista;
Nodo *aux2;

while((aux1 != NULL) && (aux1->dato <n)){
aux2 = aux1;
aux1 = aux1->siguiente;
}
if(lista == aux1){
lista = nuevo_nodo;
}
else{
aux2->siguiente = nuevo_nodo;
}
nuevo_nodo->siguiente = aux1;

cout<<"\tElemento "<<n<<" insertado a la lista\n";

}


Y en C
#include <stdio.h>
#include <stdlib.h>

typedef struct Nodo{
int dato;
struct Nodo *siguiente;
}Nodo;

void insertarLista(Nodo *&,int);

int main(int argc, char *argv[]) {
Nodo *lista = NULL;
int dato;

printf("Digite un numero: ");
scanf("%d",&dato);
insertarLista(lista,dato);



return 0;
}

void insertarLista(Nodo *&lista,int n){
Nodo *nuevo_nodo = (Nodo*)malloc(sizeof(int));
nuevo_nodo->dato = n;

Nodo *aux1 = lista;
Nodo *aux2;

while((aux1 != NULL) && (aux1->dato <n)){
aux2 = aux1;
aux1 = aux1->siguiente;
}
if(lista == aux1){
lista = nuevo_nodo;
}
else{
aux2->siguiente = nuevo_nodo;
}
nuevo_nodo->siguiente = aux1;

printf("Elemento %d insertado a la lista\n",n);
}

CalgaryCorpus

#1
La referencia para el caso funciona como una simplificacion de punteros y desreferenciaciones:

- Cambia en la definicion de la funcion para que reciba un puintero (quedaria Nodo **lista)
- En todas partes en que el codigo original de insertarLista en C++ que diga lista, en el de C pones *lista . (si llegas a omitir alguna, el programa va a fallar).
- En la invocacion de la funcion, en el main, donde dice lista, pones &lista.
Aqui mi perfil en LinkedIn, invitame un cafe aqui