|  | ! Copyright 2019-2025 Free Software Foundation, Inc. | 
|  | ! | 
|  | ! This program is free software; you can redistribute it and/or modify | 
|  | ! it under the terms of the GNU General Public License as published by | 
|  | ! the Free Software Foundation; either version 3 of the License, or | 
|  | ! (at your option) any later version. | 
|  | ! | 
|  | ! This program is distributed in the hope that it will be useful, | 
|  | ! but WITHOUT ANY WARRANTY; without even the implied warranty of | 
|  | ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
|  | ! GNU General Public License for more details. | 
|  | ! | 
|  | ! You should have received a copy of the GNU General Public License | 
|  | ! along with this program.  If not, see <http://www.gnu.org/licenses/>. | 
|  |  | 
|  | program pointers | 
|  |  | 
|  | type :: two | 
|  | integer, allocatable :: ivla1 (:) | 
|  | integer, allocatable :: ivla2 (:, :) | 
|  | end type two | 
|  |  | 
|  | type :: typeWithPointer | 
|  | integer i | 
|  | type(typeWithPointer), pointer:: p | 
|  | end type typeWithPointer | 
|  |  | 
|  | type :: twoPtr | 
|  | type (two), pointer :: p | 
|  | end type twoPtr | 
|  |  | 
|  | logical, target :: logv | 
|  | complex, target :: comv | 
|  | character, target :: charv | 
|  | character (len=3), target :: chara | 
|  | integer, target :: intv | 
|  | integer, target, dimension (10,2) :: inta | 
|  | integer, target, allocatable, dimension (:) :: intvla | 
|  | real, target :: realv | 
|  | type(two), target :: twov | 
|  | type(twoPtr) :: arrayOfPtr (3) | 
|  | type(typeWithPointer), target:: cyclicp1,cyclicp2 | 
|  |  | 
|  | logical, pointer :: logp | 
|  | complex, pointer :: comp | 
|  | character, pointer :: charp | 
|  | character (len=3), pointer :: charap | 
|  | integer, pointer :: intp | 
|  | integer, pointer, dimension (:,:) :: intap | 
|  | integer, pointer, dimension (:) :: intvlap | 
|  | real, pointer :: realp | 
|  | type(two), pointer :: twop | 
|  |  | 
|  | nullify (logp) | 
|  | nullify (comp) | 
|  | nullify (charp) | 
|  | nullify (charap) | 
|  | nullify (intp) | 
|  | nullify (intap) | 
|  | nullify (intvlap) | 
|  | nullify (realp) | 
|  | nullify (twop) | 
|  | nullify (arrayOfPtr(1)%p) | 
|  | nullify (arrayOfPtr(2)%p) | 
|  | nullify (arrayOfPtr(3)%p) | 
|  | nullify (cyclicp1%p) | 
|  | nullify (cyclicp2%p) | 
|  |  | 
|  | logp => logv    ! Before pointer assignment | 
|  | comp => comv | 
|  | charp => charv | 
|  | charap => chara | 
|  | intp => intv | 
|  | intap => inta | 
|  | intvlap => intvla | 
|  | realp => realv | 
|  | twop => twov | 
|  | arrayOfPtr(2)%p => twov | 
|  | cyclicp1%i = 1 | 
|  | cyclicp1%p => cyclicp2 | 
|  | cyclicp2%i = 2 | 
|  | cyclicp2%p => cyclicp1 | 
|  |  | 
|  | logv = associated(logp)     ! Before value assignment | 
|  | comv = cmplx(1,2) | 
|  | charv = "a" | 
|  | chara = "abc" | 
|  | intv = 10 | 
|  | inta(:,:) = 1 | 
|  | inta(3,1) = 3 | 
|  | allocate (intvla(10)) | 
|  | intvla(:) = 2 | 
|  | intvla(4) = 4 | 
|  | intvlap => intvla | 
|  | realv = 3.14 | 
|  |  | 
|  | allocate (twov%ivla1(3)) | 
|  | allocate (twov%ivla2(2,2)) | 
|  | twov%ivla1(1) = 11 | 
|  | twov%ivla1(2) = 12 | 
|  | twov%ivla1(3) = 13 | 
|  | twov%ivla2(1,1) = 211 | 
|  | twov%ivla2(2,1) = 221 | 
|  | twov%ivla2(1,2) = 212 | 
|  | twov%ivla2(2,2) = 222 | 
|  |  | 
|  | intv = intv + 1 ! After value assignment | 
|  |  | 
|  | end program pointers |