代码之家  ›  专栏  ›  技术社区  ›  Phil H

我可以有一个指向可分配数组组件中某个项的指针吗?

  •  4
  • Phil H  · 技术社区  · 14 年前

    我有一个用户定义的类型 vector . 在另一种类型中,我有一个可分配的向量数组。我想从这个数组中得到一个可分配的指针。所以我想我应该这样做:

    type another_type
      type(vector),allocatable,target::my_vectors(:)
    end type
    

    type(vector),pointer::pointed_vec
    

    This attribute specification is not valid for a component definition statement.
    

    我可以有一个指向可分配数组中单个项的指针吗?有可能吗?

    2 回复  |  直到 9 年前
        1
  •  5
  •   Deditos Oren    14 年前

    TARGET 属性。因此,第二个类型定义中的allocatable不能是一个目标,因为这只是对类型应该是什么样子的描述,如果您愿意的话,可以是一个模板。

    但是,您可以给出该类型的实际实例 目标

    编辑 :另一种方法,可能更重要的是,在类型中指定向量数组 POINTER 属性,这隐式地使它既是合法的指针对象,也可以用来分配内存。你只需要确保你没有重新分配指针( v 在使用它分配内存之后,因为这样会出现泄漏。

    PROGRAM so_pointtype
    
      IMPLICIT NONE
    
      TYPE vec
        INTEGER :: x = 2, y = 3
      END TYPE vec
    
      TYPE foo
        TYPE(vec),POINTER :: v(:)
      END TYPE foo
    
      TYPE(foo) :: z
      TYPE(vec),DIMENSION(:),POINTER :: p2 => NULL()
    
      ALLOCATE(z%v(3))
    
      PRINT*,z%v(:)
    
      p2 => z%v(:)
    
      PRINT*,p2
    
    END PROGRAM so_pointtype
    
        2
  •  1
  •   Deditos Oren    14 年前

    my_vectors 是标量,不能具有 allocatable 属性。可能是这个声明给了编译器错误。使用gfortran,我得到一条编译时消息:

      TYPE(vector),ALLOCATABLE,TARGET :: my_vectors
                                    1
    Error: Scalar object 'my_vectors' at (1) may not be ALLOCATABLE
    

    尝试声明为 my_vectors(:) .