Fortran 95/2003 Explained の5章の例を動くようにしたもの。乱数で正負の数を作り、そのうち正の数だけを選んで、ちょうどの大きさの配列へのポインターを返す関数。
ソースプログラム
MODULE m_test IMPLICIT NONE CONTAINS !-------------------------------------- FUNCTION compact(x) REAL, POINTER :: compact(:) REAL, INTENT(IN) :: x(:) INTEGER :: n n = COUNT( x > 0.0 ) ALLOCATE( compact(n) ) compact = PACK( x, x > 0.0 ) RETURN END FUNCTION compact !-------------------------------------- END MODULE m_test !====================================== PROGRAM pointerfunc USE m_test IMPLICIT NONE REAL :: x(100) REAL, POINTER :: y(:) CALL RANDOM_SEED() CALL RANDOM_NUMBER(x) x = x - 0.5 y => compact(x) PRINT *, SIZE(y) PRINT *, y DEALLOCATE(y) STOP END PROGRAM pointerfunc