Dominando structs en C: Paso, retorno y manejo por referencia
Estructuras en C: Paso, retorno y manejo por referencia
En programación C, las estructuras permiten agrupar datos relacionados en una sola entidad. Esta guía recorre tres operaciones esenciales con structs: pasarlos a funciones, retornarlos desde funciones y manipularlos por referencia. Cada sección incluye una explicación concisa y un ejemplo funcional para consolidar su comprensión.
Pasar structs a funciones
Al igual que los tipos integrados, las variables struct pueden pasarse directamente a una función. Antes de profundizar, es útil repasar estructuras en C, funciones en C y funciones definidas por el usuario.
- Estructuras en C
- Funciones en C
- Función definida por el usuario
El siguiente ejemplo demuestra cómo pasar un struct student a una función que imprime su contenido.
#include <stdio.h>
struct student {
char name[50];
int age;
};
// Prototipo de función
void display(struct student s);
int main() {
struct student s1;
printf("Introduzca nombre: ");
scanf("%[^ ]%%*c", s1.name); // leer hasta salto de línea
printf("Introduzca edad: ");
scanf("%d", &s1.age);
display(s1); // pasar struct a función
return 0;
}
void display(struct student s) {
printf("\nMostrando información\n");
printf("Nombre: %s", s.name);
printf("\nEdad: %d", s.age);
}
Salida
Introduzca nombre: Bond Introduzca edad: 13 Mostrando información Nombre: Bond Edad: 13
Retornar un struct desde una función
Las funciones pueden retornar structs completos, permitiendo una separación limpia de recolección y procesamiento de datos. El siguiente ejemplo recopila información de un estudiante dentro de una función y la retorna a main.
#include <stdio.h>
struct student {
char name[50];
int age;
};
// Prototipo de función
struct student getInformation();
int main() {
struct student s;
s = getInformation();
printf("\nMostrando información\n");
printf("Nombre: %s", s.name);
printf("\nEdad: %d", s.age);
return 0;
}
struct student getInformation() {
struct student s1;
printf("Introduzca nombre: ");
scanf("%[^ ]%%*c", s1.name);
printf("Introduzca edad: ");
scanf("%d", &s1.age);
return s1;
}
El tipo de retorno de la función coincide con el struct que retorna, asegurando seguridad de tipos y claridad.
Pasar un struct por referencia
Cuando necesita que una función modifique un struct, pase su dirección (es decir, un puntero). Esto es análogo a pasar tipos integrados por referencia. El siguiente ejemplo suma dos números complejos y almacena el resultado a través de un puntero.
#include <stdio.h>
typedef struct Complex {
float real;
float imag;
} complex;
void addNumbers(complex c1, complex c2, complex *result);
int main() {
complex c1, c2, result;
printf("Para el primer número,\n");
printf("Introduzca parte real: ");
scanf("%f", &c1.real);
printf("Introduzca parte imaginaria: ");
scanf("%f", &c1.imag);
printf("Para el segundo número,\n");
printf("Introduzca parte real: ");
scanf("%f", &c2.real);
printf("Introduzca parte imaginaria: ");
scanf("%f", &c2.imag);
addNumbers(c1, c2, &result);
printf("\nresult.real = %.1f\n", result.real);
printf("result.imag = %.1f", result.imag);
return 0;
}
void addNumbers(complex c1, complex c2, complex *result) {
result->real = c1.real + c2.real;
result->imag = c1.imag + c2.imag;
}
Salida
Para el primer número, Introduzca parte real: 1.1 Introduzca parte imaginaria: -2.4 Para el segundo número, Introduzca parte real: 3.4 Introduzca parte imaginaria: -3.2 result.real = 4.5 result.imag = -5.6
Como result se pasa por referencia, cualquier cambio dentro de addNumbers afecta inmediatamente la variable en main.
Al dominar estas técnicas, puede escribir código C más modular, legible y eficiente que aprovecha todo el poder de las estructuras.
Lenguaje C
- Transformadores eléctricos: función, diseño y aplicaciones industriales
- Los 15 componentes clave de un torno y sus funciones
- Entendiendo los Structs en C#: Definición, Uso y Diferencias Clave
- Funciones y clases amigas en C++: dominando el control de acceso
- Dominando structs en C: Definición, variables, acceso y ejemplos avanzados
- Dominando structs y punteros en C: Guía práctica
- Entendiendo la estructura de un programa C: Guía para principiantes
- Entendiendo los tipos de datos en C: Guía completa
- Entendiendo constantes y literales en C: Tipos, uso y mejores prácticas
- Dominando funciones en C: Estructura, declaración y mejores prácticas
- Dominando la Sobrecarga en C++: Funciones y Operadores Explicados