TEMA 7

MAS TIPOS DE DATOS


ESTRUCTURAS

En C una estructura es una colección de variables que se referencian bajo el mismo nombre. Una estructura proporciona un medio conveniente para mantener junta información que se relaciona. Una definición de estructura forma una plantilla que se puede usar para crear variables de estructura. Las variables que forman la estructura son llamados elementos estructurados.

Generalmente, todos los elementos en la estructura están relacionados lógicamente unos con otros. Por ejemplo, se puede representar una lista de nombres de correo en una estructura. Mediante la palabra clave struct se le indica al compilador que defina una plantilla de estructura.

struct direc
{
char nombre[30];
char calle[40];
char ciudad[20];
char estado[3];
unsigned int codigo;
};

Con el trozo de código anterior no ha sido declarada ninguna variable, tan sólo se ha definido el formato. Para declarar una variable, se hará como sigue:

struct direc info_direc;

Se pueden declarar una o más variables cuando se define una estructura entre ) y ;.
Por ejemplo:

struct direc
{
char nombre[30];
char calle[40];
char ciudad[20];
char estado[3];
unsigned int codigo;
} info_direc, binfo, cinfo;

observar que direc es una etiqueta para la estructura que sirve como una forma breve para futuras declaraciones. Como en este última declaración se indican las variables con esta estructura, se puede omitir el nombre de la estructura tipo.

Las estructuras pueden ser también preinicializadas en la declaración:

struct direc info_direc={"Vicente Fernandez","Fantasia 2000","Dorado","MMX",12345};

Para referenciar o accesar un miembro (o campo) de una estructura, C proporciona el operador punto ., por ejemplo, para asignar a info_direc otro código, lo hacemos como:

info_direc.codigo=54321;
Definicion de nuevos tipos de datos

Se señalo previamente que typedef se puede usar para definir nuevos nombres de datos explicítamente, usando algunos de los tipos de datos de C, donde su formato es:

typedef ;

Se puede usar typedef para crear nombres para tipos más complejos, como una estructura, por ejemplo:

typedef struct direc
{
char nombre[30];
char calle[40];
char ciudad[20];
char estado[3];
unsigned int codigo;
} sdirec;

sdirec info_direc={"Vicente Fernandez","Fantasia 2000","Dorado","MMX",12345};
en este caso direc sirve como una etiqueta a la estructura y es opcional, ya que ha sido definido un nuevo tipo de dato, por lo que la etiqueta no tiene mucho uso, en donde sdirec es el nuevo tipo de datos e info_direc es una variable del tipo sdirec, la cual es una estructura.
Con C también se pueden tener arreglos de estructuras:

typedef struct direc
{
char nombre[30];
char calle[40];
char ciudad[20];
char estado[3];
unsigned int codigo;
} info_direc;

info_direc artistas[1000];

por lo anterior, artistas tiene 1000 elementos del tipo info_direc. Lo anterior podría ser accesado de la siguiente forma:

artistas[50].codigo=22222;
UNIONES

Una union es una variable la cual podría guardar (en momentos diferentes) objetos de diferentes tamaños y tipos. C emplea la sentencia union para crear uniones por ejemplo:

union numero
{
short shortnumero;
long longnumero;
double floatnumero;
} unumero;

con lo anterior se define una unión llamada numero y una instancia de esta llamada unumero. numero es la etiqueta de la unión y tiene el mismo comportamiento que la etiqueta en la estructura.

Los miembros pueden ser accesados de la siguiente forma:

printf("%ld\n",unumero.longnumero);

con la llamada a la función se muestra el valor de longnumero.

Cuando el compilador de C esta reservando memoria para las uniones, siempre creará una variable lo suficientemente grande para que quepa el tipo de variable más largo de la unión.

Con la finalidad de que el programa pueda llevar el registro del tipo de la variable unión usada en un momento dado, es común tener una estructura (con una unión anidada) y una variable que indica el tipo de unión.

Se muestra un ejemplo de lo anterior:

typedef struct
{
int maxpasajeros;
} jet;

typedef struct
{
int capac_elev;
} helicoptero;

typedef struct
{
int maxcarga;
} avioncarga;

typedef union
{
jet jetu;
helicoptero helicopterou;
avioncarga avioncargau;
} transporteaereo;

typedef struct
{
int tipo;
int velocidad;
transporteaereo descripcion;
} un_transporteaereo

en el ejemplo se define una unión base de transporte aéreo el cual puede ser un jet, un helicóptero o un avion de carga.

En la estructura un_transporeaereo hay un miembro para el tipo, que indica cual es la estructura manejada en ése momento.

REGRESAR ARRIBA


REGRESAR A LA PAGINA INICIAL