分类:
2010-02-28 13:12:20
temp=p(i)
getbig=>p(i)
endif
end do
End Function
!-----------------------------------------------------------------------
用Module来封装函数,相当于写好了Interface:
!-----------------------------------------------------------------------
Module func
contains
Function getbig(p)
Implicit none
Integer, Pointer :: p(:)
Integer, Pointer :: getbig
Integer n,temp,i
n=size(p,1)
temp=0
do i=1,n
if (temp
temp=p(i)
getbig=>p(i)
endif
end do
End Function
end module
use func
Implicit none
Integer, target :: a(5)
Integer, Pointer :: p(:)
a=(/1,2,3,4,5/)
p=>a
write (*,*) getbig(p)
stop
End
!-----------------------------------------------------------------------
指针的应用:
◆指向多维数组:
integer, target :: matrix(100:100)
integer, pointer :: p(:,:)
p=>matrix(10:20,10:20)
!-----------------------------------------------------------------------
指向Type类型:
type person
character*20 name
integer number
real old
end type
type(person) :: me,he,temp
type(person),pointer :: pme,phe,ptemp
pme=>me
phe=>he
ptemp=>pme
!-----------------------------------------------------------------------
◆指向Next
module k_module
type :: knoten
integer :: i
type (knoten), pointer :: next
end type knoten
type(knoten) punkt
end k_module
!-----------------------------------------------------------------------
第一行定义一个扩展类型knoten
第二行定义一个编号i,例如 punkt%i
第三行定义一个指针next,类型为knoten,例如:punkt%next指向一个地址。
指针punkt%next还没有指向的时候,是没有定义的,也就是说punkt%next%i不存在。
指针punkt%next只能指向一个knoten类型的地址,即变量punkt%next%i与punkt%next%next
例如:
!-----------------------------------------------------------------------
call k_module
implict none
type(knoten), target :: k(3)
tyep(knoten), pointer :: p
integer :: i
p=>k(1) !定义一个计数指针
k(1)%i=1
k(1)%next=>k(2) !定义k(1)%next指向k(2)
k(2)%i=2
k(1)%next=>k(2)
k(3)%i=3
nullify(k(3)%next) !定义k(3)的指针变量不再有指向!
!连续输出的方法:
i=1
do while (.true.)
write (*,*) p%i
if (.not. associated (p%next)) exit
p=>p%next
end do
stop
end
!-----------------------------------------------------------------------
循环运行过程:
p=>k(1) 输出p%i 即k(1)%i=1
p%next=k(2)
p%next%next=k(3)
p%next%next%i=k(3)%i=3
i=1, p=>k(1)%next 即k(2) 输出p%i 即k(2)%i=1
i=2, p=>k(2)%next 即k(3) 输出p%i 即k(3)%i=1
i=3, exit
数据结构为
k(1)=knoten(1,K(2))
k(2)=knoten(1,K(3))
k(3)=knoten(1,null())