目标和关联
目标是另一个正常变量,为它留出了空间。目标变量必须用target属性。
使用关联运算符 (=>) 将指针变量与目标变量关联。
让我们重写前面的例子,来演示这个概念 -
program pointerExample
implicit none
integer, pointer :: p1
integer, target :: t1
p1=>t1
p1 = 1
Print *, p1
Print *, t1
p1 = p1 + 4
Print *, p1
Print *, t1
t1 = 8
Print *, p1
Print *, t1
end program pointerExample
编译并执行上述代码时,会产生以下结果 -
指针可以是 -
在上面的程序中,我们有associated指针 p1 和目标 t1,使用 => 运算符。函数关联,测试指针的关联状态。
这nullify语句将指针与目标解除关联。
Nullify 不会清空目标,因为可能有多个指针指向同一个目标。但是,清空指针也意味着无效。
示例 1
以下示例演示了这些概念 -
program pointerExample
implicit none
integer, pointer :: p1
integer, target :: t1
integer, target :: t2
p1=>t1
p1 = 1
Print *, p1
Print *, t1
p1 = p1 + 4
Print *, p1
Print *, t1
t1 = 8
Print *, p1
Print *, t1
nullify(p1)
Print *, t1
p1=>t2
Print *, associated(p1)
Print*, associated(p1, t1)
Print*, associated(p1, t2)
!what is the value of p1 at present
Print *, p1
Print *, t2
p1 = 10
Print *, p1
Print *, t2
end program pointerExample
编译并执行上述代码时,会产生以下结果 -
1
1
5
5
8
8
8
T
F
T
0
0
10
10
请注意,每次运行代码时,内存地址都会不同。
示例 2
program pointerExample
implicit none
integer, pointer :: a, b
integer, target :: t
integer :: n
t = 1
a => t
t = 2
b => t
n = a + b
Print *, a, b, t, n
end program pointerExample
编译并执行上述代码时,会产生以下结果 -