Specifies that an object is a pointer.
The POINTER attribute can be specified in a type declaration
statement or an POINTER statement, and takes one of the following
forms:
Type Declaration Statement:
type, [att-ls,] POINTER [,att-ls] :: ptr [(spec)] [,ptr [(spec)]]...
Statement:
POINTER [::] ptr [(spec)] [,ptr [(spec)]]...
type Is a data type specifier.
att-ls Is an optional list of attribute specifiers.
ptr Is the name of the pointer. The pointer
cannot be declared with the INTENT or
PARAMETER attributes.
spec Is a deferred-shape specification
(: [,:]...).
A pointer must not be referenced or defined unless it becomes
pointer associated (through pointer assignment or an ALLOCATE
statement) with a target object that can be referenced or defined.
An object with the POINTER attribute has no initial storage set
aside for it.
If the pointer is an array, and it is given the DIMENSION attribute
elsewhere in the program, it must be declared as a deferred-shape
array.
A pointer cannot be specified in an EQUIVALENCE or NAMELIST
statement.
The POINTER attribute is compatible with the AUTOMATIC, DIMENSION
(with deferred shape), OPTIONAL, PRIVATE, PUBLIC, SAVE, STATIC, and
VOLATILE attributes.
EXAMPLES:
The following example shows type declaration statements specifying
the POINTER attribute:
TYPE(SYSTEM), POINTER :: CURRENT, LAST
REAL, DIMENSION(:,:), POINTER :: I, J, REVERSE
The following is an example of the POINTER statement:
TYPE(SYSTEM) :: TODAYS
POINTER :: TODAYS, A(:,:)