Estructuras en C
Las estructuras en C permiten almacenar diferentes tipos de datos a diferencia por ejemplo de los arrays que solamente pueden contener conjuntos de un tipo de dato. Además, las estructuras son precursoras de un tipo más avanzado de dato denominado clase en C++.
Definición e inicialización
Para definir una estructura utilizamos la palabra reservada struct
y entre llaves definimos cada tipo de dato que contendrá dicha estructura.
struct tipo_nuevo {
tipo var1;
tipo var2;
....
tipo varn;
};
En donde tipo_nuevo
es un nuevo tipo de dato creado a partir de los demás tipos conocidos. Observa el siguiente ejemplo en donde creamos la estructura car
que contiene tres tipos de datos.
#include <stdio.h>
#include <string.h>
int main()
{
struct car {
char producer[15];
char model[15];
int year;
};
struct car ford;
strcpy(ford.producer, "FORD");
strcpy(ford.model, "FIESTA SE");
ford.year = 2016;
printf("The car is a %s %s %d\n", ford.producer, ford.model, ford.year);
return 0;
}
Obtendrás una salida similar a la siguiente:
The car is a FORD FIESTA SE 2016
Como puedes darte cuenta la forma de acceder a cada miembro de la estructura es mediante el caracter punto utilizando el nombre de la variable struct y el nombre del tipo miembro. Observa que también hubiera sido posible declarar la variable de estructura así:
struct car {
char producer[15];
char model[15];
int year;
} ford;
Incluso, es posible omitir la etiqueta de la estructura si solamente vamos a crear una estructura con esas caracteristicas.
struct {
char producer[15];
char model[15];
int year;
} ford;
Punteros a estructuras
En C también podemos crear punteros a estructuras. En este caso resulta bastante flexible acceder a los valores de una estructura utilizando el operador flecha. Modifiquemos un poco el ejemplo anterior para utilizar un puntero hacia la estructura creada.
#include <stdio.h>
#include <string.h>
int main()
{
struct car {
char producer[15];
char model[15];
int year;
} ford;
struct car *apun_car;
apun_car = &ford;
strcpy(apun_car->producer, "FORD");
strcpy(apun_car->model, "FIESTA SE");
ford.year = 2016;
printf(
"The car is a %s %s %d\n",
apun_car->producer,
apun_car->model,
apun_car->year
);
return 0;
}