Sun Studio 12 Update 1:Fortran 用户指南

4.3 Cray 指针

Cray 指针是一个变量,其值是另一个实体(称为指针对象)的地址。

f95 支持 Cray 指针;标准 Fortran 95 不支持。

4.3.1 语法

Cray POINTER 语句采用以下格式:


POINTER  ( pointer_name, pointee_name [array_spec] ), …

其中,pointer_namepointee_namearray_spec 如下所示:

pointer_name

指向相应 pointee_name 的指针。

pointer_name 包含 pointee_name 的地址。必须是一个标量变量名称(但不是派生类型)。不能是常量、结构名称、数组或函数。

pointee_name

指向相应 pointer_name 的指针对象

必须是: 变量名、数组声明符或数组名称

array_spec

如果 array_spec 存在,则它必须是显形(常量或非常量边界)或者假定大小。

例如,可以声明指向两个指针对象的 Cray 指针:


    POINTER ( p, b ),  ( q, c )

以上示例声明 Cray 指针 p 及其指针对象 b 以及 Cray 指针 q 及其指针对象 c

还可以声明指向数组的 Cray 指针:


     POINTER ( ix, x(n, 0:m) )

以上示例声明 Cray 指针 ix 及其指针对象 x;并将 x 声明为 n x (m+1) 维数组。

4.3.2 Cray 指针的用途

通过将变量与存储块中的特定位置动态关联起来,您可以使用指针访问用户管理的存储。

Cray 指针允许访问绝对内存地址。

4.3.3 声明 Cray 指针和 Fortran 95 指针

Cray 指针声明如下:

POINTER ( pointer_name, pointee_name [array_spec] )

Fortran 95 指针声明如下:

POINTER object_name

不能混用这两种类型的指针。

4.3.4 Cray 指针的功能

4.3.5 Cray 指针的限制

4.3.6 Cray 指针对象的限制

4.3.7 Cray 指针的用法

可以将 Cray 指针赋值如下:

示例: 按上述方式使用 Cray 指针。


    SUBROUTINE  sub ( n )
    COMMON pool(100000)
    INTEGER blk(128), word64
    REAL a(1000), b(n), c(100000-n-1000)
    POINTER ( pblk, blk ), (ia, a ), ( ib, b ), &
            ( ic, c ), ( address, word64 )
    DATA address / 64 /
    pblk = 0
    ia = LOC( pool )
    ib = ia + 4000
    ic = ib + n
    ...

有关以上示例的说明: