Estructuras (struct) en C - AlgoritmosyEstructurasDeDatos/Laboratorio_JSL GitHub Wiki
Uno de los tipos de dato compuestos principales en C es la estructura (struct). Su objetivo es permitir que una variable combine varios (tipos de) datos en sí. Podemos definir una estructura como:
struct [tag] {
tipo_1 valor_1;
tipo_2 valor_2;
...;
tipo_n valor_n;
} [variable];
Esto permite definir la estructura con una etiqueta (tag) opcional, para luego declarar variables que tengan los miembros definidos. Por ejemplo, podemos definir la estructura vector y definir los vectores v y w con:
struct vector {
// Almacena las coordenadas del vector
float x;
float y;
float z;
} v, w;
Una vez definida la estructura y las variables de ese tipo, podemos acceder a sus miembros usando la notación de punto:
/* Asigna las coordenadas de v a partir
* de las de w
*/
v.x = 2*w.x;
v.y = w.y;
v.z = -w.z;
Lo que viene a continuación del punto es un dato del tipo declarado, con todo lo que ello significa. Hay que notar que, aunque esta notación es análoga a la de otros lenguajes orientados a objetos, como C++, Java o Python, esto no quiere decir que C sea un lenguaje orientado a objetos. Dichos lenguajes heredan la notación desde este tipo de dato de C.
Como puede ser que tengamos la estructura definida en un encabezado, al ser importante y/o general (ver, por ejemplo, la estructura tm de la biblioteca time.h), la podemos usar como tipo de dato, en cuyo caso, definimos una nueva variable usando la construcción struct tag variable:
struct vector u = {5.0, -1.5, 2.5};
Las llaves nos permiten definir los valores iniciales de la estructura, todos a la vez.
Alternativamente, podemos usar la estructura para definir un tipo usando typedef:
typedef struct {
// Almacena las coordenadas del vector
float x;
float y;
float z;
} vector;
vector u, v = {5.0, -1.5, 2.5}, w;
Al tener una estructura que represente un tipo de dato compuesto, podemos ya hacer operaciones sobre ellas, como definir funciones que tomen como parámetros estas estructuras y construyan resultados nuevos (como calcular el módulo del vector) o generen nuevas estructuras a partir de otras (como la suma vectorial o la amplificación por escalar).