世慷 发表于 2015-4-13 13:36:05

指针指向问题求教

本帖最后由 世慷 于 2015-4-13 13:36 编辑

如下面的代码,我想实现变量Element中成员Node包含3个元素,每个元素依次指向数组Node的第1、3、4号元素的效果。查了下教材,上面指向的也是间隔均匀的情况,所以也没有解决,特在这里来请教一下!
Program test
      Type ClassNode
                Real(8) x,y!节点坐标
                Real(8) E,v!材料属性
      End Type

      Type ClassElement!三角形单元
                Type(ClassNode),Pointer::Node(:)
      End Type
      
      Type(ClassNode) , target :: Node(4)
      Type(ClassElement) :: Element
      Node(1).x=10
      Node(2).x=20
      Node(3).x=30
      Node(4).x=40
      
      Element.Node(1) => Node(1)
      Element.Node(2) => Node(3)
      Element.Node(3) => Node(4)
      Print*,Element.Node(1).x,',',Element.Node(2).x,',',Element.Node(3).x
      Pause
End

楚香饭 发表于 2015-4-13 15:39:19

本帖最后由 楚香饭 于 2015-4-13 15:42 编辑

这是很多新手容易理解错误的一个问题。

Fortran 的指针,只有“(指向数组的)指针”,而没有“(指向变量的)指针的数组”(红色是实质,而蓝色是组成部分,橙色是修饰语)

也就是说 Type(ClassNode),Pointer::Node(:) ,它是一个整体,它只能整体指向一个数组。而不能分别指向。

假如你想指向 1,3,5(等差数列),可以用这个代码:Program test
Type ClassNode
    Real(8) x,y!节点坐标
    Real(8) E,v!材料属性
End Type
Type ClassElement!三角形单元
    Type(ClassNode),Pointer::Node(:)
End Type
Type(ClassNode) , target :: Node(5)
Type(ClassElement) :: Element
Node(:).x=
Element.Node => Node(1:5:2)
Print * , Element.Node(1:3).x
Pause
End Program test如果你想分别指向,试试这样的代码:
Program test
Type ClassNode
    Real(8) x,y!节点坐标
    Real(8) E,v!材料属性
End Type
Type ClassElement!三角形单元
    Type(ClassNode),Pointer::Node
End Type
Type(ClassNode) , target :: Node(5)
Type(ClassElement) :: Element(3)
Node(:).x=
Element(1).Node => Node(1)
Element(2).Node => Node(3)
Element(3).Node => Node(4)
Print * , Element(1).Node.x , Element(2).Node.x , Element(3).Node.x
Pause
End Program test

世慷 发表于 2015-4-14 08:34:23

嗯,谢谢哈!

百事可乐 发表于 2015-4-17 16:35:33

Fortran默认是传地址的,所以对指针数组,指针的指针,需求没那么大.
页: [1]
查看完整版本: 指针指向问题求教