新手求告知
MODULEFUNCTYPE PERSON
CHARACTER ( LEN = 10 ) :: NAME
REAL :: HEIGHT , WEIGHT
END TYPE
TYPE PPERSON
TYPE(PERSON) , POINTER :: P
END TYPE
CONTAINS
SUBROUTINE SORT (P)
IMPLICIT NONE
TYPE(PPERSON) :: P (:)
TYPE(PPERSON) :: TEMP
INTEGER I,J,S
S = SIZE(P,1)
DO I = 1 , S-1
DO J = I+1 , S
IF( P(J)%P%HEIGHT < P(I)%P%HEIGHT ) THEN
TEMP = P(I)
P(I) = P(J)
P(J) = TEMP
END IF
END DO
END DO
RETURN
END SUBROUTINE
END MODULE
PROGRAM MAIN
USE FUNC
IMPLICIT NONE
TYPE(PERSON) , TARGET :: P(3) = (/PERSON("CHEN" , 180.0 , 56.0 ), &
PERSON("HUANG", 190.0 , 75.0 ),&
PERSON("LIU", 177.0 , 89.0 )/)
TYPE(PPERSON) :: PT(3)
INTEGER I
FORALL (I = 1:3)
PT(I)%P => P(I)
END FORALL
CALL SORT(PT)
WRITE (*,"(3(A8,F6.1,F5.1/))")( PT(I)%P , I = 1,3)
STOP
END PROGRAM
这里子程序里的,TYPE(PPERSON) :: P (:),为什么可以使用P (:)。
在这里TYPE(PPERSON)并不是个指针,为什么可以使用这种类似可变数组的表达。
而在主程序里TYPE(PPERSON) :: PT(3)就不能使用PT(:)了。
请前辈们看看。
TYPE(PPERSON) :: P (:) 在子程序里,如果 P 是虚参,则这种用法叫“假定形状”,意思是,实参多大,虚参就多大。
它只能对虚参进行,所以主程序不能使用。 指针的排序为啥要用赋值呢?
用
TEMP => P(I)
P(I) => P(J)
P(J) => TEMP
呀
指针赋值(=)比指针指向(=>)慢多了
fcode 发表于 2018-4-22 22:17
TYPE(PPERSON) :: P (:) 在子程序里,如果 P 是虚参,则这种用法叫“假定形状”,意思是,实参多大,虚参就 ...
谢谢,懂了 本帖最后由 shaoqikao100 于 2018-4-23 14:50 编辑
胡文刚 发表于 2018-4-23 07:32
指针的排序为啥要用赋值呢?
用
TEMP => P(I)
这里的temp和p并不是指针是类,不能用指向的。 TYPE(PPERSON) , target:: P (:)
TYPE(PERSON), pointer :: TEMP
TEMP => P(I)%P
P(I)%P => P(J)%P
P(J)%P => TEMP
胡文刚 发表于 2018-4-23 15:26
TYPE(PPERSON) , target:: P (:)
TYPE(PERSON), pointer :: TEMP
嗯嗯,这样是可以的
页:
[1]