Utilizamos cookies propias y de terceros. [Más información sobre las cookies].
Política de cookies
Proyecto AjpdSoft

· Inicio
· Buscar
· Contactar
· Cookies
· Descargas
· Foros
· Historia
· Nosotros
· Temas
· Top 10
· Trucos
· Tutoriales
· Wiki
Declarar, redimensionar y trabajar con Arrays dinámicos - Delphi
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

Visita nuestro nuevo sitio web con programas y contenidos actualizados: Proyecto A