Cuando un tipo de dato pointer o un puntero con tipo, se usa como parámetro de una función o procedimiento, lo que se pasa a esa función o procedimiento es una dirección de memoria. Es decir si un puntero se pasa como VAR, la dirección de memoria del puntero se podrá modificar y también se podrá modificar el valor de la variable a la que apunta, pero si se pasa sin VAR entonces la dirección de memoria del puntero no se podrá modificar pero si podrá modificar el valor de la variable a la que apunta. El siguiente ejemplo muestra esa situación.
El procedimiento CambiandoValores, cambiará los valores de las variables a las que apunta el puntero sin importar si se usa VAR o no, y CambiandoPunteros en este ejemplo intercambiará las direcciones de los punteros, ya que se esta usando VAR para ese propósito. Esta situación también se aplica a los punteros con tipo, pero no es el caso de los tipos de datos AnsiString y UnicodeString, que se comportarán como la variable estática string.
Hay que tener presente que un parámetro de arreglos abiertos, no es lo mismo que los arreglos dinámicos, el primero se usa generalmente con arreglos estáticos aunque se pueden pasar arreglos dinámicos en un parámetro de arreglos abiertos, pero esto no permite usar setlength dentro de la rutina para crear un arreglo dinámico.
El siguiente ejemplo muestra como usar los arreglos dinámicos como parámetros, para una rutina que lo necesite:
Cómo se puede observar, se crea un tipo de dato de un arreglo dinámico, para poder usarlo en el procedimiento Crear, de esa manera se podrá pasar el puntero para que crear el arreglo dinámico con setlength, es importante usar VAR, para que la dirección de memoria que tendrá el puntero del nuevo arreglo dinámico sea devuelto por el procedimiento.