Declaración y definición de tipo access

Explicación

Un valor de tipo access es un puntero que referencia a un objeto o un subprograma. El modificador all indica que el puntero puede referenciar objetos tanto en memoria dinámica como en la pila de ejecución. El modificador constant indica que el objeto referenciado por el puntero se considerará constante. La "Exclusión del nulo" (null_exclusion) indica que el puntero no puede tomar el valor null.

Una aplicación frecuente de los punteros es la creación de estructuras de datos dinámicas, por ejemplo, listas encadenadas. Este tipo de estructuras están formadas por un conjunto de nodos conectados mediante campos de enlace que son punteros a nodos del mismo tipo. Para definir estas estructuras suele ser necesario utilizar una declaración incompleta del tipo de los nodos.

El acceso a los objetos referenciados por los punteros se hace mediante una derefenciación.

Sintaxis

access_full_type_declaration ::= 
     type defining_identifier is access_type_definition;
access_type_definition ::= 
    [null_exclusion] access_to_object_definition
  | [null_exclusion] access_to_subprogram_definition

access_to_object_definition ::= 
    access [general_access_modifier] subtype_indication

general_access_modifier ::= all | constant

null_exclusion ::= not null

access_definition ::= 
    [null_exclusion] access [constant] subtype_mark
  | [null_exclusion] access [protected] procedure parameter_profile
  | [null_exclusion] access [protected] function parameter_and_result_profile

Ejemplo

type Persona is record
   Nombre    : String (1 .. 20);
   Apellidos : String (1 .. 50);
end record;
type Vector is array (1 .. 50) of Integer;
--  Tipos puntero
type Puntero_1 is access Integer;
type Puntero_2 is access all Integer;
type Puntero_3 is access constant Integer;
type Access_Persona is access Persona;
type Access_Vector is access Vector;
   
--  Variables puntero
A, B : Puntero_1;
R    : Access_Persona;
V    : Access_Vector;
--  Variables puntero con definición de tipo anónimo
P : access Integer;
Q : not null access Integer := new Integer;

Véase