Capítulo 9. Estructuras.Las estructuras son tipos de datos que contienen otros datos, es una agrupación de variables bajo un identificador común. Para crear una estructura debemos definirla con el método
type que con el se pueden definir nuevos tipos de datos.
Por ejemplo:
type
Cadena = string;
De esta forma definimos un nuevo tipo de datos, llamado
Cadena, que es tipo string. Después se podría crear una variable con el nuevo tipo de dato.
var
Prueba: Cadena;
Puedes definir tipos de datos, que se conocen como datos tipo
enum. Son como constantes que tienen un valor numérico, pero los identificas con una cadena.
type
Coche = (seat, bmw, golf, mercedes, ferrari, porsche);
De esta forma, definimos el tipo de dato Coche que solo puede tomar los valores entre paréntesis. En realidad, el tipo de datos Coche es numérico positivo, seat corresponde al 0, bmw al 1, etc...
Un ejemplo de como usarlo:
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils;
type
Coche = (seat, bmw, golf, mercedes, ferrari, porsche);
var
MiCoche: Coche;
begin
MiCoche:= bmw;
end.
Para crear una estructura se emplea la directiva
record, en C se llama
struct.
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils;
type
Agenda = record
Nombre: string;
Apellidos: string;
Telefono: integer;
end;
begin
end.
Definimos el tipo de datos Agenda, que es una estructura, y en su interior contiene 3 subvariables: Nombre, Apellidos y Telefono. Para acceder a las variables de la estructura haríamos algo como esto:
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils;
type
Agenda = record
Nombre: string;
Apellidos: string;
Telefono: integer;
end;
var
MiAgenda: Agenda;
begin
MiAgenda.Nombre:= 'Pepe';
MiAgenda.Apellidos:= 'No tengo apellidos';
MiAgenda.Telefono:= 62352352;
end.
Creamos la variable MiAgenda que es del tipo Agenda, que acabamos de crear. Para acceder a las subvariables se pone un . y el nombre de la variable.
Las estructuras son muy útiles en programación y se emplean mucho. Cuando quieres volcar estructuras en ficheros y trabajar con la memoria de forma más compacta, tienes que declarar la estructura como
packed record y la estructura tiene que tener tamaño fijo. Es decir, una estructura que vas a volcar en un fichero no puede tener una variable de tipo string, porque no tiene tamaño fijo... esto ya lo veremos más adelante cuando veamos ficheros.
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils;
type
Agenda = packed record
Nombre: array[0..49] of char;
Apellidos: array[0..99] of char;
Telefono: integer;
end;
var
MiAgenda: Agenda;
begin
MiAgenda.Nombre:= 'Pepe';
MiAgenda.Apellidos:= 'No tengo apellidos';
MiAgenda.Telefono:= 62352352;
end.
En este ejemplo, la variable Nombre sólo puede contener 50 caracteres y Apellidos 100. Trabajar con variables que almacenan caracteres de tamaño fijo, como es el caso, puede suponer errores de desbordamiento (Buffer Overflow) si no sabes lo que haces.