[Duda] Pasar struct por referencia

Iniciado por jaxoR, 26 Agosto 2014, 03:48 AM

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

jaxoR

Buenas, mi duda es como pasar un registro por referencia a una función.                                                                                                                                                                                                                                                                                          

rir3760

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 (cpp) [Seleccionar]
#include <iostream>
using std::cin;

struct punto {
   int x;
   int y;
};

void leer_punto(punto& p);

// ...

int main()
{
   punto p;
   
   leer_punto(p);
   
   // ...
   
   return 0;
}

void leer_punto(punto& p)
{
   cin >> p.x;
   cin >> p.y;
}


Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

jaxoR


rir3760

Por supuesto que si ya que C no tiene referencias (pueden emularse mediante punteros).

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

jaxoR


jaxoR

En realidad no se resolvio, sigo teniendo el mismo problema:

struct registro
    {
        char nombre[30];
        char apellido[30];
        int telefono;
        int edad;

    };

void SetearReg(registro *clientes, int *i)
{
    for(i = 0; i >= 200; i++)
    {
        clientes[i].telefono = 0;
        clientes[i].edad = 0;
    }
}

int main()
{

    registro clientes[200];
    int i;

   SetearReg(&clientes, &i);
}


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'|

avesudra

Debes declarar correctamente la estructura struct registro clientes[200];Un saludo.
Regístrate en

Blaster

Cita de: wiD^ en 26 Agosto 2014, 17:19 PM
En realidad no se resolvio, sigo teniendo el mismo problema:

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

Código (cpp) [Seleccionar]
typedef struct
{
    char nombre[30];
    char apellido[30];
    int telefono;
    int edad;
}registro;


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

Código (cpp) [Seleccionar]
void SetearReg(registro *clientes)
{
    int i;
    for(i = 0; i <= 200; i++)
    {
        clientes[i].telefono = 0;
        clientes[i].edad = 0;
    }
}


Saludos

jaxoR

Y si quiero pasar un arreglo de registros?

rir3760

Cita de: wiD^ en 26 Agosto 2014, 20:26 PMY si quiero pasar un arreglo de registros?
No entiendo la pregunta ya que eso es lo que estas haciendo en tu programa:
int main()
{

   registro clientes[200];
   int i;

  SetearReg(&clientes, &i);
}

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
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language