! 成績リスト PROGRAM usage_of_pointer IMPLICIT NONE INTEGER :: tensu CHARACTER(LEN=12) :: namae TYPE unit ! 自分自身を成分にもつ構造型 CHARACTER(LEN=12) :: name INTEGER :: mark TYPE(unit), POINTER :: next end TYPE TYPE(unit), POINTER :: ent, new, p ALLOCATE( ent ); NULLIFY( ent%next ) ! 最初は空にしておく DO PRINT '(1X, A)', 'Input name (or [enter-key] to stop): ' READ( *,'(A)' ) namae IF ( namae == ' ' ) EXIT PRINT '(1X, A)', 'Input her or his mark: ' READ *, tensu CALL rearrange END DO ! 出力 p => ent%next DO WHILE( ASSOCIATED(p) ) ! null となるまで続ける PRINT '(A12, I4)', p%name, p%mark p => p%next END DO CONTAINS SUBROUTINE rearrange IMPLICIT NONE ALLOCATE( new ) ! (1) new = unit( namae, tensu, ent%next ) ! (2) ent%next => new ! (3) END SUBROUTINE END PROGRAM usage_of_pointer