首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Fortran中获取数组指针的地址?

如何在Fortran中获取数组指针的地址?
EN

Stack Overflow用户
提问于 2012-09-27 02:06:21
回答 2查看 3.8K关注 0票数 0

我想得到数组指针的地址。原型代码如下:

代码语言:javascript
复制
program main

    implicit none

    type foo
        integer, allocatable :: i(:)
        integer j
    end type

    type(foo) a
    integer, pointer :: ai(:)

    ai => a%i

    print *, "The address of a is ", loc(a)
    print *, "The address of a%i is", loc(ai) ! <--- I expect the same address as a.

end program main

我的最终目标是通过数组指针ai的地址获得atype(foo)的地址,因为i是类型(Foo)的第一部分。

提前感谢!

EN

回答 2

Stack Overflow用户

发布于 2012-09-27 02:33:49

Fortran并不保证用户定义的第一项与该用户定义类型的地址相同。也许在项目之前有一个标题。也许有一些垫子。也许编译器以不同的顺序存储这些项。也许不同的编译器会采取不同的做法。所有这些都没有被指定。所以你的期望可能不会发生。Fortran几乎不需要地址。你想做什么?如果您正在与C接口,则ISO_C_Binding提供C_LOC。

根据评论进行编辑。如果您的目标是通过省略前面的"a %“来简化变量名,则可以使用指针创建访问相同存储的替代变量。你不必试图用指针通过语言。示例:

代码语言:javascript
复制
program main

    implicit none

    type foo
        integer, pointer :: i(:)
        integer j
    end type

    type(foo) a
    integer, pointer :: ai(:)

    allocate ( a%i (5) )
    a%i = [ 2, 5, 1, 3, 9 ]
    ai => a%i

    write (*, '( "a%i=", 5(2X,I2) )' ) a%i
    write (*, '( "ai=", 5(2X,I2) )' ) ai

end program main

产出如下:

代码语言:javascript
复制
a%i=   2   5   1   3   9
ai=   2   5   1   3   9
票数 1
EN

Stack Overflow用户

发布于 2012-09-27 02:40:41

你不能,反正不用标准的Fortran。

请注意,您的期望是错误的。

loc是一个扩展。它所做的是特定于处理器的,但通常它将为您提供参数所代表的数据对象的地址的整数表示。( F2003标准的C_LOC大致相当于。)在这种情况下,数据对象是一个可分配的数组。在我知道的所有处理器中,该数组的存储不在托管可分配组件的派生类型对象的存储中。派生类型对象只包含描述数组存储位置(以及数组大小等)的描述符,而不是数组本身的存储。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12613077

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档