It works. But there are some cases where passing an array element (i.e. an address and nothing else) is really what is needed (the toy example here is too simplistic to illustrate the cases where it’s needed)
EDIT: the usage case is mainly when calling a C or a legacy F77 routine. For instance a FFT routine, and imagine you want to perform 1D FTTs along the 3rd dimension of a cube. You would write something like:
interface
subroutine cfft( buf, len, nvect, inc, incv )
complex :: buf(*)
integer :: len ! fft length
integer :: nvect ! number of vectors to transform
integer :: inc ! increment between 2 adjacent elements of a vector
integer :: incv ! increment between the first elements of 2 adjacent vectors
end subroutine
end interface
complex :: x(:,:,:) ! the shape is [n1,n2,n3]
do i2 = 1, n2
call cfft( x(1,i2,1), n3, n1, n1*n2, 1 )
! this could be alternatively:
! call cfft( x(:,i2,:), n3, n1, n1, 1 )
! but copy-in/copy-out would occur
end do