POINTER (Fortran 90)
用途
POINTER 属性将对象指定为指针变量。
术语 指针 是指具有 Fortran 90 POINTER 属性的对象。 整数 POINTER 语句作为 POINTER 语句提供有关先前版本的 IBM® XL Fortran 中记录的内容的详细信息; 这些指针现在称为 整数指针。
语法
规则
object_name 指的是数据对象或函数结果。 如果在作用域限定单元中的其他位置使用 DIMENSION 属性声明 object_name ,那么数组规范必须是 deferred_shape_spec_list。
object_name 不得出现在整数 POINTER, NAMELIST或 EQUIVALENCE 语句中。 如果 object_name 是派生类型定义的组件,那么不能在 EQUIVALENCE 或 NAMELIST 语句中指定使用该类型声明的任何变量。
指针变量可以出现在公共块和块数据程序单元中。
要确保 Fortran 90 指针特定于线程,请不要为指针指定 SAVE 或 STATIC 属性。 这些属性由用户显式指定,或者通过使用 -qsave 编译器选项隐式指定。 但是,请注意,如果在目标为静态的指针赋值语句中使用非静态指针,那么对指针的所有引用实际上都是对静态共享目标的引用。 
具有 POINTER 属性的组件的对象本身可以具有 TARGET, INTENT或 ALLOCATABLE 属性,尽管它不能显示在数据传输语句中。
您可以为 POINTER属性。 
| 自动 3 | INTENT | PUBLIC |
| ASYNCHRONOUS | OPTIONAL | SAVE |
| 连续 2 | PRIVATE | 静态 3 |
| DIMENSION | 受保护 1 | VOLATILE |
注意:
|
||
这些属性仅适用于指针本身,不适用于任何关联目标,但适用于关联目标的 DIMENSION 属性除外。
示例
Example1:
INTEGER, POINTER :: PTR(:)
INTEGER, TARGET :: TARG(5)
PTR => TARG ! PTR is associated with TARG and is
! assigned an array specification of (5)
PTR(1) = 5 ! TARG(1) has value of 5
PRINT *, FUNC()
CONTAINS
REAL FUNCTION FUNC()
POINTER :: FUNC ! Function result is a pointer
.
.
.
END FUNCTION
END
Example 2: Fortran 90 指针和线程安全
FUNCTION MYFUNC(ARG) ! MYPTR is thread-specific.
INTEGER, POINTER :: MYPTR ! every thread that invokes
! 'MYFUNC' will allocate a
ALLOCATE(MYPTR) ! new piece of storage that
MYPTR = ARG ! is only accessible within
! that thread.
ANYVAR = MYPTR
END FUNCTION
