Un struct en C permite usar algo parecido a los objetos anónimos de la programación orientada a objetos. No son clases, simplemente son un modo de agrupar un objeto de determinado tipo con ciertas propiedades.
En este tutorial te mostraré cómo declarar, asignar y leer valores de un struct en C. Será una introducción y referencia con ejemplos sobre el uso de structs en C
Declaración de struct
La sintaxis es:
struct nombre_del_struct {
tipo_de_dato propiedad;
tipo_de_dato otra_propiedad_o_atributo;
}; // <-- No olvidar el punto y coma
Se debe usar la palabra reservada struct
, y usar las llaves para encerrar las propiedades o atributos del mismo. Ahora que ya vimos la sintaxis, veamos un ejemplo:
struct persona {
char nombre[MAXIMA_LONGITUD_CADENA];
int edad;
double altura;
};
En este caso tenemos un struct
que representa a una persona y tiene 3 atributos. El nombre, que es una cadena, la edad y la altura.
Crear variable struct
Para crear una variable (si se le puede llamar así) que apunta a un espacio de memoria para el struct, usamos malloc
, de este modo solicitamos memoria para nuestro struct, pasándole la cantidad de bytes que el mismo ocupa a través de sizeof
.
// Asignar espacio de memoria
struct persona* p = malloc(sizeof(struct persona));
if (p == NULL) {
printf("No hay memoria suficiente");
return 0;
}
Nota: nuestro struct
de tipo persona se llama p
.
De este modo podemos crear varios structs. Un struct también puede llevar dentro de sí otro struct, cosa que vimos cuando implementamos una pila dinámica en C.
Asignar valores
Para asignar o leer valores podemos usar el operador flecha, que es ->
. En este caso debido a que las cadenas en C son algo complejas no podemos asignar directamente el valor como en el caso de los datos enteros y dobles, así que usamos strncpy.
// Asignar datos
p->altura = 1.55;
p->edad = 23;
// Nota: para asignar una cadena no podemos usar el operador =, debemos copiar
// los datos
strncpy(p->nombre, "Luis Cabrera Benito", MAXIMA_LONGITUD_CADENA);
Leer valores de struct
En el caso de acceder a los valores del struct, igualmente usamos el operador de flecha. Si se desea imprimir la cadena, ya no es necesario usar strncpy
pues simplemente estamos leyendo, no asignando.
// Imprimir datos
printf("Persona con nombre %s, edad %d y altura %lf\n", p->nombre, p->edad,
p->altura);
Obviamente podrías guardar los datos del struct en un archivo o hacer cualquier cosa con ellos. En este caso simplemente estamos imprimiéndolos.
Nota: no todos los structs van a usar cadenas, solo te estoy mostrando cómo se hace para que sea un ejemplo completo.
Poniendo todo junto
El código completo queda así:
/*
https://parzibyte.me/blog
*/
#include <stdio.h>
#include <stdlib.h> // malloc
#include <string.h> // strncpy
#define MAXIMA_LONGITUD_CADENA 50
struct persona
{
char nombre[MAXIMA_LONGITUD_CADENA];
int edad;
double altura;
};
int main(void)
{
// Asignar espacio de memoria
struct persona *p = malloc(sizeof(struct persona));
if (p == NULL)
{
printf("No hay memoria suficiente");
return 0;
}
// Asignar datos
p->altura = 1.55;
p->edad = 23;
// Nota: para asignar una cadena no podemos usar el operador =, debemos copiar
// los datos
strncpy(p->nombre, "Luis Cabrera Benito", MAXIMA_LONGITUD_CADENA);
// Imprimir datos
printf("Persona con nombre %s, edad %d y altura %lf\n", p->nombre, p->edad,
p->altura);
return 0;
}
En mi caso la salida se ve así:
Te dejo con más tutoriales sobre C.