There are two main restrictions imposed upon allocatable arrays which do not apply to pointer arrays:
For example,
program ptralloc implicit none real, dimension(:), allocatable :: a real, dimension(:), pointer :: b allocate(a(4)) call t1(a) print*, a call t2(b) print*, b contains subroutine t1(a) real, dimension(:) :: a a = reshape((/1.,2.,3.,4./),(/4/)) end subroutine t1 subroutine t2(b) real, dimension(:), pointer :: b allocate(b(4)); b = reshape((/5.,6.,7.,8./),(/4/)) end subroutine t2 end program ptralloc