'

El compilador permite la creación de arreglos dinámicos, estos arreglos son punteros y se pueden crear usando las palabras reservadas Array y of, se crean de manera parecida a un arreglo con la diferencia de que no se indica los elementos, o el rango de elementos que se van a usar. Ejemplo:

El programa anterior crea un arreglo dinámico A01, esta variable viene a ser un puntero y con el uso de la rutina SetLength, creamos la variable dinámica asociado a este puntero, en este ejemplo A01 es un arreglo de 10 enteros. Cada elemento de los arreglos dinámicos se enumera empezando desde 0. Los arreglos dinámicos no se pueden usar con las rutinas getmem y freemen, al igual que sucede con Ansistring y Unicodestring, tienen un tratamiento especial por el compilador. No es necesario eliminar o liberar la variable dinámica ya que el proceso es automático o mejor dicho el compilador añade código al programa para su tratamiento. Sin embargo podemos indicar que el arreglo deba ser eliminado o liberado, usando la rutina Setlength con un valor a cero, como se mostró en el ejemplo anterior.

También es posible modificar el tamaño del arreglo dinámico, en este caso el arreglo se quedará con la mayor cantidad de elementos que entren en el nuevo tamaño. Ejemplo:

Cuando se intenta acceder a un elemento del arreglo que no está dentro de las dimensiones del arreglo, se generará un error, en la ejecución del programa. Hay que tener presente que la asignación de una variable que es un arreglo dinámico a otra, hará que ambos punteros apunten al mismo arreglo dinámico. Ejemplo:

Del ejemplo anterior al hacer en B[3] el valor 5, también cambiamos el contenido de A[3], ya que ambos punteros apuntan a la misma variable dinámica. Al igual que los arreglos abiertos también se puede usar la función High, para saber cuál es el índice del último elemento de un arreglo dinámico, otras funciones como Low nos permite saber el índice del primer elemento que siempre será 0 y length que nos permite saber la cantidad de elementos. Ejemplo:

Con los arreglos dinámicos también se pueden crear arreglos de 2, 3, 4 dimensiones, simplemente concatenando la declaración del arreglo dinámico, y al crear el arreglo dinámico se colocan como parámetros las dimensiones adicionales en la función setlength, separados por comas. Para acceder a un elemento del arreglo se accede como cualquier arreglo común de n dimensiones, pero para hacer el recorrido de un arreglo dinámico usando High, se debe hacer del siguiente modo:

for i:=low(A) to high(A) do
   for j:=low(A[i]) to high(A[i]) do
      for k:=low(A[i,j]) to High(A[i,j]) do
            Writeln(A[i,j,k]);

Debido a que High y Low sólo te permite obtener el índice de un arreglo dinámico, se debe ir accediendo por dimensiones para obtener el índice correspondiente. Ejemplo:

A continuación otro ejemplo que es una adaptación del ejemplo: "Código fuente 6" del capítulo 5.2 Arreglos (Array), pero esta vez usando arreglos dinámicos: