Estructuras en C

Author
Por Darío Rivera
Publicado el en Lenguaje 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;
}

Acerca de Darío Rivera

Author

Application Architect at Elentra Corp . Quality developer and passionate learner with 10+ years of experience in web technologies. Creator of EasyHttp , an standard way to consume HTTP Clients.

LinkedIn Twitter Instagram

Sólo aquellos que han alcanzado el éxito saben que siempre estuvo a un paso del momento en que pensaron renunciar.