Professional Documents
Culture Documents
nombre. Esto es muy til cuando queramos mantener junta informacin relacionada.
Para definir una estructura, utilizamos la palabra clave struct. Esta palabra le indica al
compilador que lo que viene a continuacin es una estructura. La forma general para
definir una estructura es la siguiente:
struct nombre_estructura
{
tipo variable1;
tipo variable2;
...
...
tipo variablei [=expresin]
...
...
tipo variableN;
} lista_variables_estructura;
Con esta definicin realmente haremos 2 cosas: por una parte, estamos definiendo
una plantilla de estructuras, la cual tomar el nombre que indique el parmetro
nombre_estructura, y por otra parte, estamos definiendo una serie de variables con la
forma de la plantilla definida. Estas variables son las que vendran dadas por el
parmetro lista_variables_estructura. Cada campo de una estructura puede ser
inicializado en la declaracin mediante una expresin de la misma forma a como se
haca al declarar una variable de un tipo bsico. Un ejemplo ms concreto podra ser la
siguiente estructura:
struct Datos_Persona
{
char nombre[20];
char apellido1[20];
char apellido2[20];
char calle[50];
char ciudad[20] = "Sevilla";
unsigned long DNI;
} pers1, pers2, pers3, pers4;
Hay que tener cuidado al elegir el lugar donde definimos la plantilla de estructura.
Lo ms normal es declararla globalmente para que pueda ser utilizada en cualquier lugar
del programa.
A la hora de definir la plantilla de estructura podemos omitir, o bien, el parmetro
nombre_estructura, o bien, el parmetro lista_variables_estructura. En el caso de que se
omita el parmetro nombre_estructura, slo podremos usar la plantilla para definir las
variables que aparezcan en el parmetro lista_variables_estructura. Si posteriormente
queremos declarar alguna otra variable utilizando esta plantilla, tendremos que volver a
definirla. Si el parmetro que omitimos es lista_variables_estructura, lo que habremos
hecho es crear una plantilla de estructura sin variables asociadas, las cuales podremos
Otra operacin que podremos realizar son asignaciones entre variables estructuras
con la misma plantilla:
c = a;
b = c;
Los tipos de los elementos individuales de una estructura pueden ser simples (int,
float, char, ) o complejos (array, otra estructura, ). Veamos un ejemplo de una
plantilla de estructura que combina elementos individuales simples y complejos.
struct fecha
{
int dia;
int mes;
int anyo;
};
struct hora
{
int horas;
int minutos;
};
struct ficha
{
char nombre[20];
char apellidos[40];
struct fecha dia_nacimiento;
struct hora hora_nacimiento;
};
En este caso una posible inicializacin de la anterior matriz en el que todos sus
componentes toman como valor el origen de coordenadas quedara de la siguiente
manera:
for (cont_filas=0; cont<10; cont_filas++)
{
for (cont_columnas=0; cont_columnas<10; cont_columnas++)
{
matriz[cont_filas][cont_columnas].x = 0;
matriz[cont_filas][cont_columnas].y = 0;
matriz[cont_filas][cont_columnas].z = 0;
}
}
Al igual que con el resto de tipos de variables, C permite crear variables punteros
a estructuras. La forma de declarar estas variables es:
struct nombre_estructura *nombre_varible_estructura;
o
struct nombre_estructura *nombre_varible_estructura[N][M];
Al igual que ocurra con los punteros a tipos bsicos de datos tambin se pueden
pasar punteros a estructuras en las llamadas a funciones. As por ejemplo tendramos:
struct coordenada coordenada1, *p_coordenada1;
flota distancia;
coordenada1.x = 5;
coordenada1.y = -11;
p_coordenada1 = &coordenada1;
cambiar_a_punto_simtrico_en_cuadrante (p_coordenada1);
cambiar_a_punto_simetrico_en_cuadrante (&coordenada1);
...
...
...
/* La siguiente funcin intercambia la coordenada x por la y */
void cambiar_a_punto_simtrico_en_cuadrante(struct coordenada
*c)
{
int aux;
aux = (*c).x;
(*c).x = (*c).y;
(*c).y = aux;
Veamos un ejemplo:
enum color{blanco,
color_mesa;
amarillo,
rojo,
verde,
azul,
marron,
negro}
Una vez definidas las variables enumeradas, las siguientes operaciones seran
vlidas:
color_mesa = verde;
color_coche = color_mesa;
if(color_mesa == azul)
printf("La mesa es de color azul\n");
switch(color_coche)
{
case blanco:
printf("El coche es de color blanco\n");
break;
case amarillo:
printf("El coche es de color amarillo\n");
break;
case rojo:
printf("El coche es de color rojo\n");
break;
case verde:
printf("El coche es de color verde\n");
break;
case azul:
printf("El coche es de color azul\n");
break;
case marron:
printf("El coche es de color marron\n");
break;
case negro:
printf("El coche es de color negro\n");
break;
Para poder definir nuevos nombres de tipos de datos, usamos la palabra clave
typedef. Con esto, realmente no estamos creando un nuevo tipo de datos, sino que se
define un nuevo nombre a un tipo ya existente. Tambin podemos usar typedef para
asignar un nombre de tipo a una estructura o a una enumeracin, de forma que para
declarar las variables de estos tipos no necesitaremos precederlos de las palabras clave
struct o enum, respectivamente. La forma general de la sentencia typedef es:
typedef tipo nombre_nuevo_tipo;
Si queremos definir una variable de este tipo de estructura basta con poner:
coordenada a;