Datos de tipo POINTER

Punteros a datos de cualquier otro tipo (INT), WORD, BYTE y STRING).

Los punteros en el lenguaje DIV tienen un funcionamiento ligeramente diferente a otros lenguajes de programación, son más sencillos de utilizar.

Estos punteros se utilizan como si fueran tablas móviles, es decir, tablas a las que se les puede decir donde deben situarse, asignándoles un OFFSET (de otro dato) a estos punteros. Entonces se podrá acceder a los datos situados en dicha posición como puntero[índice], tanto para lectura como para escritura de los valores.


Diferentes datos de tipo puntero:

INT POINTER - Puntero a datos enteros. La palabra INT puede omitirse, declarando un puntero a INT simplemente como POINTER nombre;.

WORD POINTER - Puntero a una lista o tabla de datos de tipo WORD.

BYTE POINTER - Puntero a una lista o tabla de datos de tipo BYTE.

STRING POINTER - Puntero a una cadena de texto contenida en un STRING.

STRUCT POINTER - Puntero a una estructura, deben declararse como STRUCT POINTER nombre_estructura <nombre>;. Donde <nombre> será el puntero.


Por ejemplo, si en un programa existen varias tablas de tipo WORD (declaradas como WORD t1[9], t2[9], t3[9];), se puede definir un puntero denominado ptr que permita acceder a cualquiera de ellas (como WORD POINTER ptr;). Para referirse a una de las tablas se le debe asignar la dirección de la misma al puntero (como con ptr = OFFSET t1;). A partir de ese momento, se podrá acceder a los valores de la tabla con el puntero (se podrá acceder a t1[n] como ptr[n]).

El funcionamiento de los punteros INT), WORD y BYTE es practicamente idéntico (permiten acceder a una lista de datos consecutivos).

Los punteros STRING permiten acceder únicamente a una sola cadena de texto (a todos los caracteres de la misma).

En la declaración de los punteros STRUCT debe indicarse el nombre de la estructura a la que van a referir, ya que solo podrán acceder a un tipo de estructura. No obstante, tras asignarle el OFFSET de la estructura (o el de cualquier registro de la misma), permitirán el acceso a todos los campos y a los sucesivos registros, como si el puntero se tratara de una estructura convencional.

Nota: Para declarar un puntero a una estructura es imprescindible haber declarado antes la misma. Bastará con una declaración en la que se indiquen los diferentes campos, no es necesario definir el número de registros de la estructura.


Limitación en el acceso de los punteros.

No se podrá acceder los datos apuntados hasta que no se haya establecido el OFFSET del puntero. No se puede asignar este OFFSET en la declaración del puntero, se debe hacer en una sentencia del programa, hasta llegar dicha sentencia el puntero valdrá 0 (puntero nulo). El acceso a datos con un puntero nulo provocará un error de ejecución (ver las opciones de compilación).

Es posible limitar el rango de acceso de un puntero, indicando en su declaración el valor máximo del índice permitido para el mismo. Para ello símplemente debe indicarse este entre corchetes, tras el nombre del puntero. Por ejemplo, la siguiente declaración:

STRING POINTER s[32];

Definirá un puntero a una cadena de texto, pero únicamente dejará acceder directamente a los 33 (de 0 a 32) primeros carácteres de la misma. Si se intentara acceder fuera de estos límites, el programa advertiría de ello indicando un acceso fuera de rango.


Ver: Tipos de datos - Declaración de un dato - OFFSET