Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: jaxoR en 26 Agosto 2014, 03:48 am



Título: [Duda] Pasar struct por referencia
Publicado por: jaxoR en 26 Agosto 2014, 03:48 am
Buenas, mi duda es como pasar un registro por referencia a una función.                                                                                                                                                                                                                                                                                          


Título: Re: [Duda] Pasar struct por referencia
Publicado por: rir3760 en 26 Agosto 2014, 04:25 am
En C++ solo tienes que indicar en la declaración de la función que el parámetro en cuestión es una referencia con "&", por ejemplo:
Código
  1. #include <iostream>
  2. using std::cin;
  3.  
  4. struct punto {
  5.   int x;
  6.   int y;
  7. };
  8.  
  9. void leer_punto(punto& p);
  10.  
  11. // ...
  12.  
  13. int main()
  14. {
  15.   punto p;
  16.  
  17.   leer_punto(p);
  18.  
  19.   // ...
  20.  
  21.   return 0;
  22. }
  23.  
  24. void leer_punto(punto& p)
  25. {
  26.   cin >> p.x;
  27.   cin >> p.y;
  28. }

Un saludo


Título: Re: [Duda] Pasar struct por referencia
Publicado por: jaxoR en 26 Agosto 2014, 04:35 am
En C cambia algo?


Título: Re: [Duda] Pasar struct por referencia
Publicado por: rir3760 en 26 Agosto 2014, 08:20 am
Por supuesto que si ya que C no tiene referencias (pueden emularse mediante punteros).

Un saludo


Título: Re: [Duda] Pasar struct por referencia
Publicado por: jaxoR en 26 Agosto 2014, 16:59 pm
Muchas gracias rir!


Título: Re: [Duda] Pasar struct por referencia
Publicado por: jaxoR en 26 Agosto 2014, 17:19 pm
En realidad no se resolvio, sigo teniendo el mismo problema:

Código
  1. struct registro
  2.    {
  3.        char nombre[30];
  4.        char apellido[30];
  5.        int telefono;
  6.        int edad;
  7.  
  8.    };
  9.  
  10. void SetearReg(registro *clientes, int *i)
  11. {
  12.    for(i = 0; i >= 200; i++)
  13.    {
  14.        clientes[i].telefono = 0;
  15.        clientes[i].edad = 0;
  16.    }
  17. }
  18.  
  19. int main()
  20. {
  21.  
  22.    registro clientes[200];
  23.    int i;
  24.  
  25.   SetearReg(&clientes, &i);
  26. }

Los errores:

||=== Build: Debug in Registro de clientes (compiler: GNU GCC Compiler) ===|
|13|error: unknown type name 'registro'|
||In function 'main':|
|27|error: unknown type name 'registro'|


Título: Re: Re: [Duda] Pasar struct por referencia
Publicado por: avesudra en 26 Agosto 2014, 17:28 pm
Debes declarar correctamente la estructura
Código
  1. struct registro clientes[200];
Un saludo.


Título: Re: [Duda] Pasar struct por referencia
Publicado por: Blaster en 26 Agosto 2014, 18:16 pm
En realidad no se resolvio, sigo teniendo el mismo problema:

Te convendría mas declarar la siguiente estructura de esta manera:

Código
  1. typedef struct
  2. {
  3.    char nombre[30];
  4.    char apellido[30];
  5.    int telefono;
  6.    int edad;
  7. }registro;

Y en la función SetearReg la condición de terminación de for es incorrecta (i >= 200) quedaría así :

Código
  1. void SetearReg(registro *clientes)
  2. {
  3.    int i;
  4.    for(i = 0; i <= 200; i++)
  5.    {
  6.        clientes[i].telefono = 0;
  7.        clientes[i].edad = 0;
  8.    }
  9. }

Saludos


Título: Re: [Duda] Pasar struct por referencia
Publicado por: jaxoR en 26 Agosto 2014, 20:26 pm
Y si quiero pasar un arreglo de registros?


Título: Re: [Duda] Pasar struct por referencia
Publicado por: rir3760 en 27 Agosto 2014, 02:50 am
Y si quiero pasar un arreglo de registros?
No entiendo la pregunta ya que eso es lo que estas haciendo en tu programa:
Código
  1. int main()
  2. {
  3.  
  4.   registro clientes[200];
  5.   int i;
  6.  
  7.  SetearReg(&clientes, &i);
  8. }
Por cierto no debes utilizar el operador "dirección de" (el '&') en la llamada a función y el segundo parámetro no es necesario. Y se debe utilizar la palabra reservada "struct" en la declaración del array a menos que lo estés compilando como C++.

Por ultimo lo único que debes hacer es revisar con cuidado la función "SetearReg" cortesía de Blaster y aplicar las correcciones a tu programa.

Un saludo