¿Cómo pasar o devolver una estructura a/desde una Función en C/C++?

Una estructura es un tipo de datos definido por el usuario en C/C++. Una estructura crea un tipo de datos que se puede usar para agrupar elementos de tipos posiblemente diferentes en un solo tipo.

¿Cómo pasar la estructura como argumento a las funciones?

El paso de estructura a la función se puede hacer de dos formas:

  • Pasando todos los elementos a la función individualmente.
  • Pasando toda la estructura a la función.

En este artículo, toda la estructura se pasa a la función. Esto se puede hacer utilizando la llamada por referencia , así como el método de llamada por valor .

Ejemplos 1: uso del método Call By Value

// C++ program to pass structure as an argument
// to the functions using Call By Value Method
  
#include <bits/stdc++.h>
using namespace std;
  
struct Distance {
    int kilometer;
    int meter;
};
  
// accepts distance as its parameters
void TotalDistance(Distance d1, Distance d2)
{
    // creating a new instance of the structure
    Distance d;
  
    // assigning value to new instance of structure
    d.kilometer = d1.kilometer
                  + d2.kilometer
                  + (d1.meter + d2.meter)
                        / 1000;
  
    d.meter = (d1.meter + d2.meter) % 1000;
  
    cout << "Total distance:";
    cout << "kilometer: "
         << d.kilometer << endl;
  
    cout << "meter: " << d.meter
         << endl;
}
  
// Function that initialises the value
// and calls TotalDistance function
void initializeFunction()
{
    // creating two instances of Distance
    Distance Distance1, Distance2;
  
    // assigning values to structure elements
    Distance1.kilometer = 10;
    Distance1.meter = 455;
  
    Distance2.kilometer = 9;
    Distance2.meter = 745;
  
    // calling function with (structure)
    // distance as parameters
    TotalDistance(Distance1, Distance2);
}
  
// Driver code0
int main()
{
  
    // Calling function to do required task
    initializeFunction();
  
    return 0;
}
Producción:

Total distance:kilometer: 20
meter: 200

Ejemplos 2: uso del método de llamada por referencia

// C++ program to pass structure as an argument
// to the functions using Call By Reference Method
  
#include <bits/stdc++.h>
using namespace std;
  
struct number {
    int n;
};
  
// Accepts structure as an argument
// using call by reference method
void increment(number& n2)
{
    n2.n++;
}
  
void initializeFunction()
{
    number n1;
  
    // assigning value to n
    n1.n = 10;
  
    cout << " number before calling "
         << "increment function:"
         << n1.n << endl;
  
    // calling increment function
    increment(n1);
  
    cout << "number after calling"
         << " increment function:" << n1.n;
}
  
// Driver code
int main()
{
    // Calling function to do required task
    initializeFunction();
  
    return 0;
}
Producción:

number before calling increment function:10
number after calling increment function:11

¿Cómo devolver una estructura de las funciones?

Para devolver una estructura desde una función, el tipo de devolución debe ser solo una estructura.

Ejemplos:

// C++ program to return a structure from
// a function using Call By Value Method
  
#include <iostream>
#include <stdlib.h>
  
using namespace std;
  
// required structure
struct Employee {
    int Id;
    string Name;
};
  
// return type of the function is structure
Employee data(Employee E)
{
  
    // Assigning the values to elements
    E.Id = 45;
    E.Name = "aman";
  
    // returning structure
    return (E);
}
  
// Driver code
int main()
{
  
    // creating object of Employee
    Employee Emp;
  
    // calling function data to assign value
    Emp = data(Emp);
  
    // display the output
    cout << "Employee Id: " << Emp.Id;
    cout << "\nEmployee Name: " << Emp.Name;
  
    return 0;
}
Producción:

Employee Id: 45
Employee Name: aman

Publicación traducida automáticamente

Artículo escrito por vinaychopra92vc y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *