nextupprevious
Next: 5. Declaración de variables Up:ÍndicePrevious: 3. Tipos de datos


4. Estructuras de datos

struct Es análoga al constructor record de Pascal. Su sintaxis es:

struct nombre {
 tipo miembro1;
 tipo miembro2;
 ...
} identificador1, identificador2, ...;

Nombre es el nombre de la estructura y los identificadores corresponden a variables del tipo de la estructura. Tanto el nombre como las variables pueden no existir. Los miembros son las componentes de la estructura. La forma de declarar variables del tipo definido en la estructura es:

[cualificador] struct nombre identificador1, identificador2, ...;

Para acceder a los campos de la estructura se usa la misma técnica que en Pascal: variable.miembro
Se admite el uso de estructuras dentro de la declaración de otra estructura ya que los miembros, en general, pueden tener cualquier tipo.

 struct fecha {
   int mes;
   int día;
   int año;
 };      /* Estructura fecha */
 struct cuenta {
   int cuen_no;
   char cuen_tipo;
   float saldo;
   struct fecha ultimo_pago;
 } cliente[100];   /* Estructura cuenta y declaración */

 struct cuenta clientes[20];
 clientes[0].cuen_no = cliente[99].ultimo_pago.anio;
Figura 6 Ejemplo de struct

union Es una construcción análoga al registro con variante de Pascal. Al igual que las estructuras constan de varios miembros aunque éstos comparten la misma ubicación de memoria. Se usa para hacer referencia a una misma área de memoria de varias formas. El tamaño de la unión es el tamaño del miembro mayor.
La forma de declarar una unión es:

modificador union nombre {
 tipo miembro1;
 tipo miembro2;
 ...
} identificador1, identificador2, ...;

La forma de declarar variables del tipo unión es:

cualificador union nombre variable1, variable2, ...;

union palabra {           Se declaran 4 variables
  unsigned char l[2];     a,b,c y d
  unsigned int x;         A cada variable se puede
} a,b,c,d;                acceder como entero (x) o
                          como 2 bytes (l[2]).

a.x = 65535U;   a.x es un entero
a.l[0] = 0;    a.l[0] es un byte
a.l[1] = 255;    a.l[1] es un byte
 ¿Cuánto vale a.x en este punto?
Figura 7 Ejemplo de unión

typedef Permite definir un nuevo tipo de datos en función de los ya existentes. Es análogo a las declaraciones type de Pascal. La forma general de definir un nuevo tipo es:

typedef tipo nuevo-tipo;

nuevo-tipo es el nombre del tipo que se va a definir y tipo puede ser todo lo complicado que se quiera siempre que esté definido con los tipos ya existentes.
typedef struct {
  int mes;
  int día;
  int anio;
} fecha;    /* Declaración de un nuevo tipo llamado fecha */
fecha hoy;  /* Declaración de una variable de tipo fecha */
typedef unsigned char byte;  /* Tipo byte de Pascal */
typedef unsigned int word;  /* Tipo word de Pascal */
Figura 8 Ejemplos de typedef

enum Es análogo a un tipo enumerado de Pascal. Sirve para especificar los miembros de un determinado tipo.

enum nombre { miembro0 = valor0 , miembro1 = valor1 , ... }
variable1, variable2, ...

Las expresiones = valorX son opcionales, encargándose el compilador de asignar un valor constante a cada miembro que no la posea.

enum colores {negro =-1,azul, cian, magenta, rojo = 2, blanco} fondo, borde;
enum colores primer_plano;
fondo = cian;
Figura 9 Ejemplo de enum



nextupprevious
Next: 5. Declaración de variables Up:ÍndicePrevious: 3. Tipos de datos


Última modificación: 26/4/1999


Copyright © 1999, F. de Sande - Centro Superior de Informática, Universidad de La Laguna.
All rights reserved.