Pointery
Pointery nebo také ukazatele jsou proměnné které existují za učelem toho aby odkazovali na jinou proměnnou. Pointery mají některé podobnosti s poitery z jiných jazyků, ale nejsou stejné. Pointery se hodí pro speciální datové struktůry (např. propojené seznamy), ukazování na procedury nebo pro interoperabilitu s jazykem C.
Pinter deklarujeme jako každou proměnnou jen ji přidáme specifikace ,pointer ::
. Pokud vytváříme pointer na pole můsíme vytvořit pole pointerů, ale místo velikosti stačí napsat :
a velikost se doplní podle cíle pointeru.
Aby mohlo být na proměnnou ukazováno pomocí poiteru je třebe k ní přidat pri deklaraci specifikace ,target ::
.
Asociace mezi proměnnou a pointerem se vytváří pomocí operátoru =>
.
Pointery můžeme na počátku inicializovat na stav null pomocí null()
. Je rozumné dát pointerům tento počateční stav než je nechat nedefinované.
Pointerům můžeme alokovat paměť podobně jako polím pomocí allocate(_...pointery..._)
. Stejně můžeme použít i deallocate()
Pro testování zda byl pointer již asociován s nějakou proměnnou používáme příkaz associated(_jmenoPointeru_)
. Tuto funkci můžeme použít, také na testování zda je pointer spojen s konkrétní proměnnou associated(_jmenoPointer_, _jmenoProměnné_)
.
Pointer oddělíme od proměnné pomocí funkce nullify(_pointer_)
.
program do_concurrent
use iso_fortran_env
implicit none
integer :: i
integer,pointer :: a(:) => null()
integer,target :: b(10) = [(i,i=1,10)]
integer,target :: c(5) = [(i,i=1,5)]
real :: g
do i=1,5
call random_number(g)
if(g<0.5) then
a => c
else
a => b
end if
a = 2*a
write(*,*) associated(a)
if(associated(a,b)) write(*,*) "b"
if(associated(a,c)) write(*,*) "c"
write(*,'(*(i2,1x))') a
nullify(a)
write(*,*) associated(a)
write(*,*) ""
end do
end program