Fortran Coder

查看: 7008|回复: 3
打印 上一主题 下一主题

[指针] 指针指向问题求教

[复制链接]

2

帖子

1

主题

0

精华

新人

F 币
19 元
贡献
9 点
跳转到指定楼层
楼主
发表于 2015-4-13 13:36:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 世慷 于 2015-4-13 13:36 编辑

如下面的代码,我想实现变量Element中成员Node包含3个元素,每个元素依次指向数组Node的第1、3、4号元素的效果。查了下教材,上面指向的也是间隔均匀的情况,所以也没有解决,特在这里来请教一下!
[Fortran] 纯文本查看 复制代码
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 

分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

737

帖子

4

主题

0

精华

大师

农村外出务工人员

F 币
704 元
贡献
361 点

新人勋章爱心勋章水王勋章元老勋章热心勋章

沙发
发表于 2015-4-13 15:39:19 | 只看该作者
本帖最后由 楚香饭 于 2015-4-13 15:42 编辑

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

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

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

假如你想指向 1,3,5(等差数列),可以用这个代码:
[Fortran] 纯文本查看 复制代码
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=[10,20,30,40,50]
  Element.Node => Node(1:5:2)
  Print * , Element.Node(1:3).x
  Pause
End Program test
如果你想分别指向,试试这样的代码:
[Fortran] 纯文本查看 复制代码
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=[10,20,30,40,50]
  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

2

帖子

1

主题

0

精华

新人

F 币
19 元
贡献
9 点
板凳
 楼主| 发表于 2015-4-14 08:34:23 | 只看该作者
嗯,谢谢哈!
回复

使用道具 举报

100

帖子

0

主题

0

精华

专家

F 币
550 元
贡献
291 点

规矩勋章元老勋章

QQ
地板
发表于 2015-4-17 16:35:33 | 只看该作者
Fortran默认是传地址的,所以对指针数组,指针的指针,需求没那么大.
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-12-24 21:26

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表