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