Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: jorge.esquibel en 19 Noviembre 2018, 09:01 am



Título: [C]Equivalencia de una referencia de C++ a C?
Publicado por: jorge.esquibel en 19 Noviembre 2018, 09:01 am
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:
Código
  1. 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
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. struct Nodo{
  5. int dato;
  6. Nodo *siguiente;
  7. };
  8. void insertarLista(Nodo *&,int);
  9.  
  10. int main(int argc, char *argv[]) {
  11. Nodo *lista = NULL;
  12. int dato;
  13.  
  14. cout<<"Digite un numero: ";
  15. cin>>dato;
  16.  
  17. insertarLista(lista,dato);
  18.  
  19. return 0;
  20. }
  21.  
  22. void insertarLista(Nodo *&lista,int n){
  23. Nodo *nuevo_nodo = new Nodo();
  24. nuevo_nodo->dato = n;
  25.  
  26. Nodo *aux1 = lista;
  27. Nodo *aux2;
  28.  
  29. while((aux1 != NULL) && (aux1->dato <n)){
  30. aux2 = aux1;
  31. aux1 = aux1->siguiente;
  32. }
  33. if(lista == aux1){
  34. lista = nuevo_nodo;
  35. }
  36. else{
  37. aux2->siguiente = nuevo_nodo;
  38. }
  39. nuevo_nodo->siguiente = aux1;
  40.  
  41. cout<<"\tElemento "<<n<<" insertado a la lista\n";
  42.  
  43. }

Y en C
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. typedef struct Nodo{
  5. int dato;
  6. struct Nodo *siguiente;
  7. }Nodo;
  8.  
  9. void insertarLista(Nodo *&,int);
  10.  
  11. int main(int argc, char *argv[]) {
  12. Nodo *lista = NULL;
  13. int dato;
  14.  
  15. printf("Digite un numero: ");
  16. scanf("%d",&dato);
  17. insertarLista(lista,dato);
  18.  
  19.  
  20.  
  21. return 0;
  22. }
  23.  
  24. void insertarLista(Nodo *&lista,int n){
  25. Nodo *nuevo_nodo = (Nodo*)malloc(sizeof(int));
  26. nuevo_nodo->dato = n;
  27.  
  28. Nodo *aux1 = lista;
  29. Nodo *aux2;
  30.  
  31. while((aux1 != NULL) && (aux1->dato <n)){
  32. aux2 = aux1;
  33. aux1 = aux1->siguiente;
  34. }
  35. if(lista == aux1){
  36. lista = nuevo_nodo;
  37. }
  38. else{
  39. aux2->siguiente = nuevo_nodo;
  40. }
  41. nuevo_nodo->siguiente = aux1;
  42.  
  43. printf("Elemento %d insertado a la lista\n",n);
  44. }


Título: Re: [C]Equivalencia de una referencia de C++ a C?
Publicado por: CalgaryCorpus en 19 Noviembre 2018, 14:24 pm
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.