配列構成子の書き方

なじみの薄い配列構成子ですが、うまく使えばコードが綺麗になりそうだったので、サンプルコードを書いてみた。

program main
    implicit none

    integer, pointer :: arr_p(:)
    integer :: arr(3)
    integer, parameter :: n = 3

    allocate(arr_p(n))

    arr_p = (/ 1, 2, 3 /)

    call array_debug_pointer(arr_p, n)

    arr_p(1) = 10
    arr_p(2) = 20
    arr_p(3) = 30

    call array_debug_pointer(arr_p, n)

    arr = (/arr_p(1:2), 3/)

    call array_debug(arr, 3)


    contains
    subroutine array_debug(arr, n)
        integer :: arr(:)
        integer :: n

        integer :: i
        do i = 1, n
            write(*, fmt='(i0, 2x)', advance='no') arr(i)
        end do
        write(*,*)
    end subroutine array_debug

    subroutine array_debug_pointer(arr, n)
        integer, pointer :: arr(:)
        integer :: n

        integer :: i
        do i = 1, n
            write(*, fmt='(i0, 2x)', advance='no') arr(i)
        end do
        write(*,*)
    end subroutine array_debug_pointer

end program main


(/ /)で数値や変数を囲むと配列を一行で直接代入することができるようになります。(/ /)の中には、部分配列を入れたり、数値をそのまま入れたり、ポインタを使用することもできるようです。

出力例

$ ./main
1  2  3  
10  20  30  
10  20  3