Punteros a datos de cualquier otro tipo int, unsigned short, unsigned char, ...).

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 * - Puntero a datos enteros.

unsigned short * - Puntero a datos de tipo unsigned short.

unsigned char * - Puntero a datos de tipo char.

struct nombre * - Puntero a una estructura.

Por ejemplo, si en un programa existen varias tablas de tipo int (declaradas como int t1[9], t2[9], t3[9];), se puede definir un puntero denominado ptr que permita acceder a cualquiera de ellas (como int * ptr;). Para referirse a una de las tablas se le debe asignar la dirección de la misma al puntero (como con ptr = 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, unsigned short y unsigned char es practicamente idéntico (permiten acceder a una lista de datos consecutivos).

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. 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.

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:

char s[33];

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 dará un error de ejecución.


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