将值分配给Fortran中的指针数组

时间:2015-09-30 15:18:54

标签: arrays pointers fortran

我想在Fortran 2003中为指针数组赋值。指针数组是通过派生数据类型arrpntr实现的。请看下面的一个简单示例:

  PROGRAM TST_PNTR

  real, allocatable, target  :: arr1(:), arr2(:)

  ! array of pointers
  type :: arrpntr
    real, pointer :: arr(:) => null()
  end type

  type(arrpntr) :: p(2)

  integer :: err

  integer, parameter :: M = 10, N = 10

  allocate(arr1(M), arr2(N), stat=err)

  arr1 = [ (i, i=1, 10) ]
  arr2 = arr1**2

  ! arr1 = arr1-0.5
  ! p(1)%arr => arr1

  p(1)%arr => arr1-0.5
  p(2)%arr => arr2

  write(*,*) p(1)%arr
  write(*,*) p(2)%arr

  arr1 = arr1**2
  arr2 = sqrt(arr2)

  write(*,*) p(1)%arr
  write(*,*) p(2)%arr

  deallocate(arr1, arr2, stat=err)

  nullify(p(1)%arr, p(2)%arr)

  END PROGRAM TST_PNTR

在当前状态下,编译器会抛出错误:Pointer assignment target is neither TARGET nor POINTER at (1)抱怨行p(1)%arr => arr1-0.5。它适用于我将操作分成两部分的情况,如上面的注释行。但是,我希望在不将临时变量arr1中存储中间结果的情况下获得相同的结果。操作arr1-0.5就是一个简单的例子。实际上,我想在p(1)%arr =>的右侧使用更复杂的表达式。有没有更好的方法来避免使用中间数组?

0 个答案:

没有答案
相关问题