FORTRAN中type型指针数组的使用
我要实现type类型数组中数据按某一元素值的大小排列,就定义了type型指针数组,但是在指针指向交换的过程中遇到了问题。
如果按照下列代码,程序是无法执行的:
type person
character(len=10) :: name
integer :: math, English, Chinese
end type
type(person),target :: p(5)
type(person),pointer :: pp(:)
type(person),pointer :: temp, temp1,temp2,temp3
integer :: i,s,j
p(1)=person("xzl",90,90,100)
p(2)=person("sn",80,70,100)
p(3)=person("wsq",77,88,100)
p(4)=person("xy",93,60,80)
p(5)=person("hk",55,38,48)
pp => p
100 s=size(pp,1)
do i=1,s-1
do j=i+1,s
if (pp(i)%math < pp(j)%math) then
temp=>pp(i)
pp(i)=>pp(j)
pp(j)=>temp
end if
end do
end do
VS2008返回的错误提示是object is not a pointer object [pp(i)]
object is not a pointer object [pp(j)]
但是如果我从100行处执行如下代码则可以:
temp1=>pp(1)
temp2=>pp(2)
temp3=>temp1
temp1=>temp2
temp2=>temp3
而执行如下代码又不可以
temp1=>pp(1)
pp(1)=>pp(2)
pp(2)=>temp1
还是出现同样地错误提示。
基于如上实验,认为type类型指针数组的元素之间不可以直接交换
如果按照下列代码,程序是无法执行的:
type person
character(len=10) :: name
integer :: math, English, Chinese
end type
type(person),target :: p(5)
type(person),pointer :: pp(:)
type(person),pointer :: temp, temp1,temp2,temp3
integer :: i,s,j
p(1)=person("xzl",90,90,100)
p(2)=person("sn",80,70,100)
p(3)=person("wsq",77,88,100)
p(4)=person("xy",93,60,80)
p(5)=person("hk",55,38,48)
pp => p
100 s=size(pp,1)
do i=1,s-1
do j=i+1,s
if (pp(i)%math < pp(j)%math) then
temp=>pp(i)
pp(i)=>pp(j)
pp(j)=>temp
end if
end do
end do
VS2008返回的错误提示是object is not a pointer object [pp(i)]
object is not a pointer object [pp(j)]
但是如果我从100行处执行如下代码则可以:
temp1=>pp(1)
temp2=>pp(2)
temp3=>temp1
temp1=>temp2
temp2=>temp3
而执行如下代码又不可以
temp1=>pp(1)
pp(1)=>pp(2)
pp(2)=>temp1
还是出现同样地错误提示。
基于如上实验,认为type类型指针数组的元素之间不可以直接交换
Luke
(Raleigh, United States)
Where my heart lies, let my brain lies also. - R. Browning:"One Wor...
热门话题 · · · · · · ( 去话题广场 )
- 歌手2024直播 新话题 · 2.3万次浏览
- 你喜欢张爱玲前期还是后期的作品 5.3万次浏览
- 你喜欢的诺贝尔文学奖作品 33.6万次浏览
- 那些让你印象深刻的方言书籍 47.9万次浏览
- 你最喜欢吃的卤味是什么? 9.3万次浏览
- 我的炒股经历 85.6万次浏览