Dominando structs en C: Definición, variables, acceso y ejemplos avanzados
Dominando structs en C
Aprenda a definir, crear y usar structs en C con ejemplos claros y buenas prácticas.
¿Qué es un struct en C?
Un struct (abreviatura de structure) es un tipo de dato compuesto que agrupa variables de diferentes tipos bajo un solo nombre. Es la base para crear estructuras de datos complejas en C.
Definición de una estructura
Antes de poder crear variables de un tipo struct, debe definir el tipo. La palabra clave struct introduce la definición:
struct nombreEstructura {
tipoDato miembro1;
tipoDato miembro2;
…
};
Ejemplo:
struct Person {
char name[50];
int citNo;
float salary;
};
Esto crea un nuevo tipo llamado struct Person. Ahora puede declarar variables de ese tipo.
Creación de variables de estructura
Definir un tipo struct no asigna memoria. Para trabajar con él, declare variables:
struct Person {
// miembros
};
int main() {
struct Person person1, person2, p[20];
return 0;
}
Alternativamente, combine la definición y la declaración de variables:
struct Person {
// miembros
} person1, person2, p[20];
person1yperson2son variables individualesstruct Person.pes un array de 20 instancias destruct Person.
Acceso a miembros de struct
Dos operadores recuperan miembros:
.– Operador de acceso a miembro.->– Operador de acceso a miembro mediante puntero a struct (cubierto en otro tutorial).
Para leer o modificar el salary de person2:
person2.salary
Ejemplo 1: Uso de un struct en C
#include <stdio.h>
#include <string.h>
struct Person {
char name[50];
int citNo;
float salary;
} person1;
int main() {
strcpy(person1.name, "George Orwell");
person1.citNo = 1984;
person1.salary = 2500;
printf("Nombre: %s\n", person1.name);
printf("Nº Ciudadanía: %d\n", person1.citNo);
printf("Salario: %.2f", person1.salary);
return 0;
}
Salida
Nombre: George Orwell Nº Ciudadanía: 1984 Salario: 2500.00
Observe que strcpy() copia el string en el array char de tamaño fijo porque el operador de asignación no puede usarse directamente con arrays.
Uso de typedef con structs
La palabra clave typedef crea un alias para un tipo, simplificando las declaraciones:
typedef struct Distance {
int feet;
float inch;
} distances;
int main() {
distances d1, d2;
}
Sin typedef, escribiría:
struct Distance d1, d2;
Ejemplo 2: Alias en la práctica
#include <stdio.h>
#include <string.h>
typedef struct Person {
char name[50];
int citNo;
float salary;
} person;
int main() {
person p1;
strcpy(p1.name, "George Orwell");
p1.citNo = 1984;
p1.salary = 2500;
printf("Nombre: %s\n", p1.name);
printf("Nº Ciudadanía: %d\n", p1.citNo);
printf("Salario: %.2f", p1.salary);
return 0;
}
Salida
Nombre: George Orwell Nº Ciudadanía: 1984 Salario: 2500.00
Estructuras anidadas
Los structs pueden contener otros structs, permitiendo modelado jerárquico de datos:
struct complex {
int imag;
float real;
};
struct number {
struct complex comp;
int integers;
} num1, num2;
Para establecer imag de num2 a 11:
num2.comp.imag = 11;
Ejemplo 3: Structs anidados en acción
#include <stdio.h>
struct complex {
int imag;
float real;
};
struct number {
struct complex comp;
int integer;
} num1;
int main() {
num1.comp.imag = 11;
num1.comp.real = 5.25;
num1.integer = 6;
printf("Parte Imaginaria: %d\n", num1.comp.imag);
printf("Parte Real: %.2f\n", num1.comp.real);
printf("Entero: %d", num1.integer);
return 0;
}
Salida
Parte Imaginaria: 11 Parte Real: 5.25 Entero: 6
¿Por qué usar structs en C?
Suponga que necesita almacenar el nombre, número de ciudadanía y salario de una persona. Sin structs, crearía variables separadas para cada campo de cada persona, llevando rápidamente a duplicación de código y confusión. Los structs encapsulan datos relacionados en una sola unidad lógica, promoviendo código más limpio y mantenimiento más fácil.
¿Qué sigue?
- Structs y punteros
- Pasar structs a funciones
Lenguaje C
- C# Hola Mundo – Construyendo su primera aplicación en C#
- Entendiendo palabras clave e identificadores en C#: Reglas, listas y mejores prácticas
- Domine variables y tipos de datos primitivos en C#: Guía completa
- Operadores en C# – Guía completa de operadores en C#
- Dominando operadores bit a bit y de desplazamiento en C#: Guía completa
- Fundamentos de C#: Entrada y salida esenciales
- Expresiones, sentencias y bloques en C#: Guía completa con ejemplos prácticos
- Dominando los comentarios en C#: Tipos, mejores prácticas y documentación XML
- Dominando la sentencia switch en C#: Sintaxis, ejemplos y mejores prácticas
- Operador ternario en C#: Guía concisa para expresiones condicionales
- Sentencia break en C#: Cómo y cuándo usarla