Lenguaje de programación Borland Delphi
Los arrays dinámicos son los arrays con reserva dinámica de memoria en los que las dimensiones no se conocen en tiempo de compilación. Para declarar un array dinámico, simplemente declárelo sin indicar las dimensiones del mismo:
var
arrayDinamico : array of string; //array dinámico de string
Antes de que puede utilizar un array dinámico debe reserver la memoria para el mismo asignándole una dimensión:
//reserva espacio para 10 elementos
SetLength (arrayDinamico, 10);
Una vez que se ha reservado la memoria, puede acceder a los elementos del array como uno normal:
arrayDinamico[0] := 'Esto es una prueba';
textoObtenido := arrayDinamico[0];
Los arrays dinámicos son gestionados durante su vida, por lo que no es necesario que los libere cuando acabe de utilizarlos, ya que se liberarán cuando dejen el ámbito en el que fueron creados. Sin embargo, si en alguna ocasión necesita liberarlos (por ejemplo cuando utilizan gran cantidad de memoria) lo único que tiene que hacer es asignar el array dinámico a "nil":
arrayDinamico := nill; //libera arrayDinamico de memoria
A continuación mostramos un ejemplo de un array dinámico que contiene elementos de tipo Record (registro):
procedure TForm1.Button1Click(Sender: TObject);
type
registroPrueba = record
campo1 : integer;
campo2 : string;
campo3 : double;
campo4 : TStringList;
end;
var
registro : registroPrueba; //variable de tipo registroPrueba (tipo creado anteriormente)
registro2 : registroPrueba; //variable de tipo registroPrueba (para comprobar que se guarda correctamente)
listaEjemplo : TStringList; //lista para guardar datos en el campo4 del registro (no necesaria)
arrayPrueba : array of registroPrueba; // una array con elementos de tipo "registro"
begin
//asignamos valores al registro
registro.campo1 := 43;
registro.campo2 := 'Esto es una prueba de registros';
registro.campo3 := 112234;
//inicializamos un TStringList cualquiera y le insertamos valores para asignarlo al campo4 del
//registro, aunque se podrían insertar directamente con "registro.campo4.Add('Texto');"
listaEjemplo := TStringList.Create;
listaEjemplo.Add('Estro es una prueba');
//inicializamos el TStringList del registro
registro.campo4 := TStringList.Create;
//le insertamos la lista creada anteriormente en el registro
registro.campo4 := listaEjemplo;
//redimensionamos el array con 1 elemento
SetLength(arrayPrueba, 1);
//asignamos al primer elemento del array el registro creado anteriormente
arrayPrueba[0] := registro;
//asignamos el valor del primer elemento a la variable registro2
registro2 := arrayPrueba[0];
//mostramos algún valor de registro2 y demostramos que se ha guardado correctamente
showmessage (registro2.campo4.Strings[0]);
ShowMessage(IntToStr(registro2.campo1));
end;
Publicado el: 2004-08-25