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