Tipos de datos estructurados en C - Struct y Typedef explicados con ejemplos

Durante su experiencia de programación, puede sentir la necesidad de definir su propio tipo de datos. En C, esto se hace usando dos palabras clave: structy typedef. Las estructuras y uniones le darán la oportunidad de almacenar tipos de datos no homogéneos en una sola colección.

Declarar un nuevo tipo de datos

typedef struct student_structure{ char* name; char* surname; int year_of_birth; }student;

Después de este pequeño código studenthabrá una nueva palabra clave reservada y podrá crear variables de tipo student. Tenga en cuenta que este nuevo tipo de variable se va a estructurar, lo que significa que define una lista agrupada físicamente de variables que se colocarán bajo un nombre en un bloque de memoria.

Uso de nuevos tipos de datos

Creemos ahora una nueva studentvariable e inicialicemos sus atributos:

 student stu; strcpy( stu.name, "John"); strcpy( stu.surname, "Snow"); stu.year_of_birth = 1990; printf( "Student name : %s\n", stu.name); printf( "Student surname : %s\n", stu.surname); printf( "Student year of birth : %d\n", stu.year_of_birth);

Como puede ver en este ejemplo, debe asignar un valor a todas las variables contenidas en su nuevo tipo de datos. Para acceder a una variable de estructura, puede usar el punto como en stu.name. También hay una forma más corta de asignar valores a una estructura:

typedef struct{ int x; int y; }point; point image_dimension = {640,480};

O si prefiere establecer sus valores siguiendo un orden diferente:

point img_dim = { .y = 480, .x = 640 };

Uniones vs Estructuras

Las uniones se declaran de la misma manera que las estructuras, pero son diferentes porque solo se puede usar un elemento dentro de la unión en cualquier momento.

typedef union{ int circle; int triangle; int ovel; }shape;

Debe usar unionen tal caso donde solo se aplicará una condición y solo se usará una variable. No olvide que también podemos utilizar nuestro nuevo tipo de datos:

typedef struct{ char* model; int year; }car_type; typedef struct{ char* owner; int weight; }truck_type; typedef union{ car_type car; truck_type truck; }vehicle;

Algunos trucos más

  • Cuando crea un puntero a una estructura usando el &operador, puede usar el ->operador infijo especial para deferenciarlo. Esto se usa mucho, por ejemplo, cuando se trabaja con listas enlazadas en C
  • El nuevo tipo definido se puede utilizar como otros tipos básicos para casi todo. Intente, por ejemplo, crear una matriz de tipos studenty vea cómo funciona.
  • Las estructuras se pueden copiar o asignar, ¡pero no se pueden comparar!

Más información:

  • El manual para principiantes de C: aprenda los conceptos básicos del lenguaje de programación C en solo unas horas
  • Tipos de datos en C: entero, punto flotante y vacío explicado
  • malloc en C: Explicación de la asignación de memoria dinámica en C