Estructuras

Una estructura es un bloque de código que actúa como un tipo. Para definir una estructura utilizamos la palabra clave struct

struct <nombre de la estructura>
{
      <tipo de dato miembro> <nombre miembro 1>
      <tipo de dato miembro> <nombre miembro 2>
      <tipo de dato miembro> <nombre miembro 3>
      .
      .
      .
      <tipo de dato miembro> <nombre miembro n>
};

Cada elemento de una estructura se referencia mediante el operador punto

Ej.-
/*Declaración de una estructura llamada alumno */
    struct Alumno {
          char nombre[20];
          char apellido1[20];
          char apellido2[20];
          char dirección[50];
          int edad;
          int curso;

    };

para usar la estructura alumno, primero debemos declarar una o más variables.
        struct Alumno pedro;
        struct Alumno ana;

para referenciar la edad pondríamos:

        ana.edad = 17;

Ej.-
/*Declaración de una estructura llamada fecha*/
    struct Fecha {
        int dia;
        int mes;
        int anio;
        char nombre_mes;
;
    };

Podemos inicializar una estructura al momento de declararla de la siguiente manera:

    struct Fecha hoy = {12, 8, 2017, "agosto"};


#include<stdio.h>
#include<strings.h>

struct alumno{
char nombre[20];
int edad;
};

int main(void)
{

struct alumno ana;               /*Declaración un objeto alumno */

/*También podríamos haber inicializado la estructura al momento de declararla:
 *    struct alumno ana ={"Ana", 17};
 */
ana.edad = 17;
strcpy(ana.nombre,"Ana"); /*la función strcpy está definida en strings.h */

printf("\n%d", ana.edad);
printf("\n%s\n", ana.nombre);

return 0;
}

En este ejemplo he declarado la estructura alumno fuera del cuerpo de la función main(), por lo que podremos declarar objetos derivados de esta estructura en cualquier función del programa dentro del archivo fuente. Decimos que es un objeto global.

No podemos incluir como elemento de una estructura, una función, pero si un puntero a una función.

El siguiente ejemplo declara una estructura que contiene, entre otros campos, dos punteros a funciones

La salida de este programa sería:

El primer parámetro de la función rellenar_datos() no es una estructura, sino un puntero a una estructura, por esta razón no se utiliza el operador punto para referenciar los diferentes elementos de la estructura sino el operador flecha ->

El siguiente vídeo explica las estructuras con un ejemplo de una estructura de un número complejo. Vídeo de Christian León.