Es una colección de variables del mismo o distinto tipo que se referencia bajo un único nombre, proporcionando un medio eficaz de mantener junta la información relacionada.
La definición de una estructura se realiza de la siguiente manera:
struct nombre {
lista de variables
};
Donde struct es la palabra clave que indica al compilador que se va a definir una estructura, nombre es el identificador de la estructura, y en lista de variables es donde se declaran las variables que van a componer esa estructura.
Ejemplo. De definición de una estructura.
struct complejo {
double real;
double imag;
};
Definida la estructura se pueden declarar variables de este tipo. Hay varias maneras de realizar esto:
Directamente en la definición:
struct nombre {
lista de variables
} nombre_variable1, nombre_variable2, ... ;
Tras la definición, de la siguiente manera:
struct nombre {
lista de variables
};
struct nombre nombre_variable1, nombre_variable2, ... ;
Usando la sentencia typedef, sentencia que permite definir un tipo de dato en función de los existentes. Su sintaxis es la siguiente: typedef tipo nombre;. A partir de esta sentencia podremos usar nombre para declarar variables de tipo tipo. Su uso con estructuras es el siguiente:
typedef struct {
lista de variables
} nombre;
nombre nombre_variable1, nombre_variable2, ... ;
Tanto la asignación de valor, como el acceso al asignado a cada variable de la estructura se hace de la siguiente manera: variable.miembro. Donde variable es el nombre de la variable declarada como de algún tipo de estructura y miembro es cualquiera de las variables declaradas en el cuerpo de la definición de la estructura (lista de variables).
Ejemplo_Estr_1. De definición de una estructura, declaración de variables de ese tipo y acceso a sus miembros.
// Usando la forma 1 de declarar una variable de tipo estructura
struct complejo {
double real;
double imag;
} z;
z.real = 1.2;
z.imag = 3.4;
printf("Parte real: %f. Parte imaginaria: %f\n", z.real, z.imag);
// Usando la forma 2 de declarar una variable de tipo estructura
struct complejo {
double real;
double imag;
};
struct complejo z;
z.real = 1.2;
z.imag = 3.4;
printf("Parte real: %f. Parte imaginaria: %f\n", z.real, z.imag);
// Usando la forma 3 de declarar una variable de tipo estructura
typedef struct {
double real;
double imag;
} complejo;
complejo z;
z.real = 1.2;
z.imag = 3.4;
printf("Parte real: %f. Parte imaginaria: %f\n", z.real, z.imag);
Como con cualquiera de los tipos de variables vistas se pueden declarar punteros a estructuras. En este caso el acceso a los miembros de la estructura apuntada se realiza de la siguiente manera: puntero_estructura->miembro.
Ejemplo_Estr_2. De uso de punteros a estructura
typedef struct {
double real;
double imag;
} complejo;
complejo z, *t;
t=&z;
t->real = 1.0;
t->imag = 2.1;
printf("Parte real: %f. Parte imaginaria: %f\n", z.real, z.imag); //Usando la variable z
printf("Parte real: %f. Parte imaginaria: %f\n", t->real, t->imag); //Usando el puntero t