9.20 ASSOCIATED
— Status of a pointer or pointer/target pair
- Description:
-
ASSOCIATED(POINTER [, TARGET])
determines the status of the pointer POINTER or if POINTER is associated with the target TARGET.
- Standard:
- Fortran 95 and later
- Class:
- Inquiry function
- Syntax:
-
RESULT = ASSOCIATED(POINTER [, TARGET])
- Arguments:
-
POINTER |
POINTER shall have the POINTER attribute and it can be of any type. |
TARGET |
(Optional) TARGET shall be a pointer or a target. It must have the same type, kind type parameter, and array rank as POINTER. |
The association status of neither POINTER nor TARGET shall be undefined.
- Return value:
-
ASSOCIATED(POINTER)
returns a scalar value of type LOGICAL(4)
. There are several cases: - (A) When the optional TARGET is not present then
-
ASSOCIATED(POINTER)
is true if POINTER is associated with a target; otherwise, it returns false.
- (B) If TARGET is present and a scalar target, the result is true if
-
TARGET is not a zero-sized storage sequence and the target associated with POINTER occupies the same storage units. If POINTER is disassociated, the result is false.
- (C) If TARGET is present and an array target, the result is true if
-
TARGET and POINTER have the same shape, are not zero-sized arrays, are arrays whose elements are not zero-sized storage sequences, and TARGET and POINTER occupy the same storage units in array element order. As in case(B), the result is false, if POINTER is disassociated.
- (D) If TARGET is present and an scalar pointer, the result is true
- if TARGET is associated with POINTER, the target associated with TARGET are not zero-sized storage sequences and occupy the same storage units. The result is false, if either TARGET or POINTER is disassociated.
- (E) If TARGET is present and an array pointer, the result is true if
- target associated with POINTER and the target associated with TARGET have the same shape, are not zero-sized arrays, are arrays whose elements are not zero-sized storage sequences, and TARGET and POINTER occupy the same storage units in array element order. The result is false, if either TARGET or POINTER is disassociated.
- Example:
-
program test_associated
implicit none
real, target :: tgt(2) = (/1., 2./)
real, pointer :: ptr(:)
ptr => tgt
if (associated(ptr) .eqv. .false.) call abort
if (associated(ptr,tgt) .eqv. .false.) call abort
end program test_associated
- See also:
-
NULL