G. REGISTROS. ESTRUCTURAS EN C




G.0 Introducción

En C, una estructura o registro es un conjunto de variables, del mismo tipo o no, agrupadas bajo un mismo nombre, con fin de facilitar el trabajo con ellas. A cada dato dentro de la estructura la llamamos miembro, campo o elemento.



G.1 Declaración de estructuras

La declaración de una estructura se hace de la siguiente manera:

struct nombre_estructura
{
tipo1 dato1;
tipo2 dato2;
...
tipoN datoN;
};


Observamos después de la última llave deberemos colocar “;”.


Supongamos que queremos hacer una agenda con el número de teléfono y la edad de una persona. Sin el uso de estructuras, el programa quedaría desordenado y difuso. Pero gracias a esta opción que nos permite C, el problema se simplifica. Aquí el ejemplo de la declaración de la estructura:

struct estructura_persona {
char nombre[30];
char apellido[40];
char telefono[10];
char edad;
};

Una vez definida la estructura, podemos usarla declarando una variable con esa estructura:
struct estructura_persona amigo;
Ahora la variable amigo es de tipo estructura_persona.



G.2 Acceder a los campos de la estructura

Para acceder a los campos de la estructura, lo haremos de la manera siguiente:

variable.campo;

Donde variable es el nombre de la variable de tipo estructura que hemos creado, y campo es el nombre de la variable que forma parte de la estructura. Lo veremos mejor con un ejemplo basado en la estructura definida anteriormente:

amigo.edad=27;

Con esta sentencia lo que estamos haciendo es almacenar el valor 27 en el campo edad de la variable amigo.

Una opción que nos permiten las estructuras es pasar el contenido de una estructura a otra, siempre que sean del mismo tipo naturalmente. Por ejemplo, si hemos declarado las estructuras del mismo tipo persona1 y persona2, podemos asignarle los datos almacenados en todos los campos de la estructura persona1, a la persona2 de la siguiente manera:

persona2=persona1;


G.3 Array de estructuras

Supongamos ahora que queremos guardar la información de varias personas. Con una variable de estructura sólo podemos guardar los datos de uno. Necesitamos declarar arrays de estructuras:
struct estructura_persona amigo[10];
Ahora necesitamos saber cómo acceder a cada elemento del array. La variable definida es amigo, por lo tanto para acceder al primer elemento usaremos amigo[0] y a su miembro nombre: amigo[0].nombre.



G.4 Inicializar una estructura

Primero se define la estructura y luego al declarar una variable como estructura le damos el valor inicial que queramos. Ejemplo:
struct estructura_persona amigo = {
"Juan Jose",
"Segura",
"856423541",
60
};
Por supuesto hemos de meter en cada campo el tipo de datos correcto.



G.5 Punteros a estructuras

También podemos definir puntero a estructuras:

p->miembro
(*p).miembro

Por ejemplo:

struct estructura_persona *p,amigo;
p=&amigo;
amigo.edad=27;
p->edad=28;
strcpy((*p).nombre,”Juan Jose”);



G.6 Anidamiento de estructuras

Las estructuras también pueden anidarse. Es decir, podemos usar como campo de una estructura, otra estructura. Por ejemplo.

struct pareja
{
struct persona juan;
struct persona laia;
};



G.7 Typedef

El lenguaje 'C' dispone de una declaración llamada typedef que permite la creación de nuevos tipos de datos.

Ejemplo:

typedef int entero;
entero a, b=3;

Su empleo con estructuras está especialmente indicado. Se puede hacer de varias formas:

una forma de hacerlo:

struct trabajador
{
char nombre[20];
char apellidos[40];
int edad;
};

typedef struct trabajador datos;
datos fijo,temporal;



G.8 Estructuras y funciones

Las estructuras pueden pasarse como argumentos de funciones, bien por valor o por referencia. Por ejemplo:

Si hemos declarado ya la siguiente estructura:

struct punto{
flota x;
flota y;
};

Podremos definir la siguiente función:

struct punto sumapunto(struct punto p1,struct punto p2 )
{
p1.x+=p2.x;
p1.y+=p2.y;
return p1;
}