gpt4 book ai didi

fortran - 了解 Fortran 指针

转载 作者:行者123 更新时间:2023-12-05 08:43:30 24 4
gpt4 key购买 nike

在 Fortran 中,可以将内存分配给指针,也可以:

real(kind=jp), target :: bt(100,100)
real(kind=jp), pointer :: pt(:,:)

但是你可以为指针 pt 分配内存:

allocate(pt(100,100))

我的问题是:优点和缺点是什么?就我所见,将内存分配给指针违背了指针的目的并耗尽了更多内存。当然,我对指针的了解有限,所以如果有人能向我解释这里发生了什么,我将不胜感激。

我正在使用混合了 FORTRAN 77 和 Fortran 90 代码的模型,此外,我正在使用英特尔编译器编译代码。

最佳答案

正如 Vladimir F 在对另一个答案的评论中所说,对于示例代码的作用可能存在一些混淆。虽然不是关于指针的广泛回答(已经部分涵盖),但我会简要评论。

real(kind=jp), target :: bt(100,100)
real(kind=jp), pointer :: pt(:,:)

指针 pt 此时没有指向任何东西:它具有未定义的关联状态。您同时声明了两个对象,一个带有 target 属性,一个带有 pointer 属性,但这并不意味着什么。

要将pt与目标bt相关联,需要指针赋值:

pt => bt

通过这种方式,可以通过指针 pt 继续对 bt 执行操作,而无需任何额外的内存分配(指针变量会产生一些开销,但让我们忽略它)。

是的,也可以像问题中那样进行指针分配

allocate(pt(100,100))

但是这个新生成的内存块与 bt 无关。

作为Alexander Vogt said在现代,想要做这种事情的理由减少了(改用可分配数组是一件值得考虑的好事)。

总而言之,对于“优缺点是什么?”:指针赋值和分配做完全不同的事情。选择合适的。

关于fortran - 了解 Fortran 指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28929053/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com