在 Fortran 中传递指针参数

2023-12-05

我想知道编写以下代码的正确方法是什么?

PROGRAM foo

  INTEGER :: x
  REAL(KIND=8), TARGET, DIMENSION(0: 10) :: array
  REAL(KIND=8), POINTER, DIMENSION(:) :: ptr

  ptr => array

  CALL bar(ptr)

END PROGRAM foo

SUBROUTINE bar (ptr)

  REAL(KIND=8), POINTER, DIMENSION(:) :: ptr                                                                                                                                                                                                                  
  INTEGER x
  DO x =0, 10
    ptr(x) = 2 // seg faults
  ENDDO

END SUBROUTINE bar

如果我声明它就有效ptr in bar as REAL(KIND=8), DIMENSION(0:10)。但一般来说我可能不知道传入数组的大小,那么有没有办法声明ptr成为指向某个数组的指针?我正在编译这个gfortran


如果过程具有作为指针的虚拟参数,则任何调用范围都需要显式接口。

(有很多东西需要显式接口,指针虚拟只是其中之一。)

您可以通过在主程序中放置子例程的接口块来自己提供显式接口。另一种更好的选择是将子例程放入模块中,然后在主程序中使用该模块。第三种选择是使子例程成为调用范围的内部过程。

从 Fortran 2003 开始​​,只有当您打算将指针指向不同的事物时才应该使用指针。如果您只是将指针用于实际上表现得像值的东西,那么您应该使用可分配项。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Fortran 中传递指针参数 的相关文章

  • 多维数组和指向指针的指针

    创建多维数组时char a 10 10 根据我的书 它说你必须使用类似于char a 10 将数组传递给函数 为什么必须这样指定长度 您不是只是将双指针传递给 with 并且该双指针不是已经指向分配的内存吗 那么为什么参数不能是char a
  • C++:LPWSTR 在 cout 中打印为地址

    我有一个类型变量LPTSTR 我打印到std cout with lt lt 在 ANSI 系统中 不知道它是在哪里确定的 它工作得很好 它打印了字符串 现在 在 Unicode 系统中 我得到的是十六进制地址而不是字符串 那么 为什么LP
  • #define 内存地址声明

    这个 define 语句有什么作用 它用于定义内存地址 但我不明白 uint32 t 部分 define GPxDAT uint32 t 0x6FC0 通常用于访问映射到地址空间的硬件寄存器 或者一些特定的内存地址 硬件寄存器应定义为vol
  • C 警告:函数返回局部变量的地址

    下面的函数采用包含应用程序调用路径的 argv 0 参数 并替换最后一位 直到它遇到 其中包含我想要生成的位于同一文件夹中的新应用程序的名称 顺便说一句 我声明了一个全局 argv 变量 以便函数可以访问它 因为我不想在每个函数调用中传递信
  • swig char ** 作为指向 char * 的指针

    我在使用 swig 和 char 作为指向变量 char 的指针时遇到问题 而不是作为 char 的列表 我找不到将指针包装到 char 的方法 目的是将连接的结果写入指针引用的 char 中 以下是我的代码 文件指针 cpp includ
  • 为什么我可以更改 const char *ptr 的内容?

    我传递了一个指针ptr到一个函数 其原型将其作为const foo const char str 根据我的理解 这意味着它将无法更改ptr通过了 就像下面的情况一样foo const int i If foo 试图改变的值i 编译器给出错误
  • pthread 编程中的共享数据

    对于 pthread 编程 我仍然不太确定 如果有人能告诉我一个绝对的答案 我将不胜感激 我之前的问题在这里 如何在简单的 Pthread 编程中分配数组变量 https stackoverflow com questions 151766
  • 不使用 strtok() 的字符串分词器

    我正在编写一个不使用 strtok 的字符串标记生成器 这主要是为了我自己的提高以及对指针的进一步理解 我想我几乎已经完成了 但是我收到了以下错误 myToc c 25 warning assignment makes integer fr
  • boost::python:如何调用需要指针的函数?

    我有一个函数 它接受一个 int 指针并通过 boost python 公开它 我怎样才能从Python调用这个函数 在 C 中使用 boost python void foo int i def foo foo 在Python中 impo
  • Go 编程 - 使用指针绕过访问权限

    假设我的项目有以下层次结构 fragment fragment go main go 并且在fragment go我有以下代码 只有一个 getter 没有 setter package fragment type Fragment str
  • 指向函数中结构体数组的指针

    我的指针有问题 我想用一个函数读取一个二进制文件 然后在 main c 文件中使用读取的数据 问题是我必须传递一个指向结构数组的指针才能使用 main 中的数据 代码是 define TMOLDEO 8 define TAM 41 stru
  • 简单、高效的弱指针,当目标内存被释放时设置为 NULL

    有没有简单 高效的弱 保护指针 我需要多个指向同一对象的指针 当删除该对象时 这些指针都会自动设置为 NULL 有一个 主 指针始终用于删除对象 但可以有多个其他指针引用同一对象 以下是一些不太符合我的需求的解决方案 QPointer ht
  • 带有数字/标签的 Fortran IF 语句而不是另一个语句

    这段 Fortran 代码的含义是什么 IF J1 3 20 20 21 21 J1 J1 3 20 IF J2 3 22 22 23 23 J2 J2 3 22 CONTINUE 我在旧项目中看到过 我不知道这个带有数字 标签 的 IF
  • 删除指针后将其设为 NULL 是一个好习惯吗?

    我首先要说的是 使用智能指针 您将永远不必担心这个问题 下面的代码有什么问题 Foo p new Foo use p delete p p NULL 这是由答案和评论 https stackoverflow com questions 19
  • php按值复制数组元素,而不是按引用

    我有以下代码 data x this gt x gt getResults data y data x some code here to modify data y this causes undesirably data x to be
  • 将结构化数据类型从 Fortran 传递到 C++ [重复]

    这个问题在这里已经有答案了 我在 Fortran 中有一个结构化类型 其中包含大量数据 包括指针 real 8 指针数据类型 我正在为某些 Fortran 例程开发 C API 我需要在对 Fortran 例程的调用之间保留该结构的内容 我
  • Golang 基础知识 struct 和 new() 关键字

    我正在学习 golang 当我阅读描述结构的章节时 我遇到了初始化结构的不同方法 p1 passport var p2 passport p3 passport Photo make byte 0 0 Name Scott Surname
  • CMake:Fortran 模块和编译顺序

    我有一个大型 Fortran 程序 其中包含许多目录 每个目录都在伪库中单独编译 但仍然存在相互依赖的混乱 因此最终所有伪库都组合在一个可用的库中 我想使用 Fortran 模块 但它非常脆弱 因为我不能依赖自动依赖项检查 并且根据顺序编译
  • 为什么我不能将一个非 const 指针传递给一个函数,该函数将以对 const 指针的引用作为其参数

    这是一个代码片段 希望能够传达我想要做的事情 void updatePointer const int i i int main int array 5 int arrayPtr array updatePointer arrayPtr r
  • 空指针与 int 等价

    Bjarne 在 C 编程语言 中写道 空指针与整数零不同 但 0 可以用作空指针的指针初始值设定项 这是否意味着 void voidPointer 0 int zero 0 int castPointer reinterpret cast

随机推荐

  • Spring + JPA + Hibernate

    我是春天的新手 我正在尝试使用 Spring 3 1 3 和 JPA 2 0 设置简单的 Web 应用程序 我已将所有必需的库添加到 WEB INF lib 中 启动过程中没有错误 但我的 DaoImpl 文件中的entityManager
  • 从项目目录内的文件夹中读取文件

    在 JSP 项目中 我正在从目录中读取文件 如果我给出完整路径 那么我可以轻松读取该文件 BufferedReader br new BufferedReader new FileReader C ProjectFolderName fil
  • for(;;)循环解释

    在 JS 中 我偶然发现了一种 for 循环 它是for 其功能类似于while true 环形 for 循环括号中的分号起什么作用 for statement 1 statement 2 statement 3 code block to
  • scikit-learn 中每个数据分割的交叉验证指标

    我需要为 X test y test 数据的每个分割显式获取交叉验证统计信息 因此 为了尝试这样做 我做了 kf KFold n splits n splits X train tmp y train tmp X test tmp y te
  • 带有辅助工具提示的 EditText

    我在 iPhone 上有这个应用程序 我想使其适用于 Android 在 iPhone 上 当开始在 EditText 中编辑文本时 显示屏顶部会显示带有消息的工具提示 我想让它也适用于 Android 但我没有找不到任何有帮助的东西 这里
  • 如何在c#项目中使用c++ dll? [复制]

    这个问题在这里已经有答案了 可能的重复 在 C 应用程序中使用 C 类 DLL 我尝试在 c 中添加引用以添加 c dll 失败 如果您有任何其他方法在 c 中添加或使用 c dll 我们该如何使用 我在 C 项目中添加 dll 的错误在哪
  • Visual Basic 6 中 Shell 进程的标准输出读取

    首先 我要声明我不是 Visual Basic 6 专家 我的需要是 从 VB6 客户端代码启动外部 exe 文件 等待该过程完成 并在执行期间 即时 读取来自其标准输出的消息 以便我可以将其打印在文本文件小部件或类似部件上 我想知道是否有
  • 带有本地 docker 的 Jenkins 服务器

    我的 CI 实施有问题 我安装了 Jenkins 服务器并创建了构建管道 来自本教程 https getintodevops com blog building your first docker image with jenkins 2
  • php 邮件附件

    我一直在使用这个脚本向某些员工发送电子邮件 但由于我的系统发生了变化 我现在必须随电子邮件发送附件 并且我已经尝试了多种代码来完成此操作 但没有成功 我仍然收到电子邮件 但没有附件 在这种情况下毫无意义 我已将我正在使用的脚本放在下面 我已
  • 我可以使用 C++ 程序之外的随机内存地址访问随机数据吗

    如果有两个程序正在运行 其中一个程序在某个内存地址存储一个数字 如果我知道该内存地址 并将其硬编码到第二个程序中并打印出该地址处的值 它实际上会得到该信息吗 C 是否允许程序访问 RAM 中存储的任何数据 无论它是否是程序的一部分 在没有虚
  • CSS 负边距定位

    使用负边距进行定位可以吗 我当前的网站中有很多内容 感觉这不是一种稳定的定位方式 我通常也建议使用它们 例如 我有一个结账页面 其中三个 div 彼此叠置 div class A header div div class B content
  • 为什么 Skylake 在单线程内存吞吐量方面比 Broadwell-E 好很多?

    我们有一个简单的内存吞吐量基准 它所做的只是对一大块内存重复进行memcpy 查看几台不同机器上的结果 针对 64 位编译 Skylake 机器的表现明显优于 Broadwell E 操作系统 Win10 64 处理器速度和 RAM 速度
  • Qt - 访问包路径

    Qt 文档 Mac 的差异 页面提供了以下用于访问应用程序的捆绑路径的代码 CFURLRef appUrlRef CFBundleCopyBundleURL CFBundleGetMainBundle CFStringRef macPath
  • C++11 中的自动引用

    我有一些麻烦about自动参考 const int i 1 auto ri1 i auto ri2 1 error 为什么是推导类型ri1 const int但不是ri2 Thanks Since i有类型const int but 1有类
  • android:单个文件的pathPattern

    我需要定义IntentFilter对于名为myfile ext 目前我的清单如下所示
  • NHibernate 标准查询 - 选择与连接实体不同的值

    我有一个 Person 实体 每个人都有一个国家 我想选择所有有人民的不同国家 此 Criteria 查询返回所有不同的 CountryID criteria SetProjection Projections Distinct Proje
  • 如何使用 matplotlib 绘制具有长度颜色渐变的 3d 箭袋图?给出错误“ValueError:对象对于所需数组来说太深”

    我想通过颜色编码来指示箭袋的长度 箭头称为箭袋吗 对于二维箭袋图来说这不是问题 Here已经完成了 对于 3D 投影来说 它很难失败 此代码重现了该问题 import matplotlib pyplot as plt import nump
  • 仅根据事例值调用方法的 switch 替代方案

    有没有可能用更短 可读的代码编写下一个开关 switch SomeValue case 001 return DoMethod1 break case 002 return DoMethod2 break etc 我在想以某种方式 Dict
  • 为什么实现接口的抽象类可能会错过接口方法之一的声明/实现?

    当您使用抽象类实现接口时 Java 中会发生一件奇怪的事情 接口的某些方法可能完全缺失 即既不存在抽象声明也不存在实际实现 但编译器不会抱怨 例如 给定接口 public interface IAnything void m1 void m
  • 在 Fortran 中传递指针参数

    我想知道编写以下代码的正确方法是什么 PROGRAM foo INTEGER x REAL KIND 8 TARGET DIMENSION 0 10 array REAL KIND 8 POINTER DIMENSION ptr ptr g