【发布时间】:2013-10-17 19:54:49
【问题描述】:
这是我的第一个问题帖子......请不要残忍。
我的问题如下。我想将 fortran 指针分配为表达式。我认为通过简单的 fortran 技术是不可能的。但由于新的 fortran 版本似乎提供了处理 C 和 C++ 中使用的东西的方法(如 c_ptr 和 c_f_pointer ... ),也许有人知道解决我的问题的方法。 (我并不真正了解 C,但我读到 C 中可以使用指针运算) 为了让事情更清楚,这是我立即想到但不起作用的代码:
program pointer
real(8),target :: a
real(8),pointer :: b
b=>a*2.0d0 ! b=>a is of course working
do i=1,10
a=dble(i)*2.0d0
write(*,*)b
end do
end program
我知道有办法解决这个问题,但在实际程序中,我想到的所有这些都会导致更长的计算时间和/或相当复杂的代码。
非常感谢,提前!
最好的,彼得
【问题讨论】:
-
不确定你要做什么,但在像 c 这样允许指针算术的语言中,算术只是加法/减法。 “算术”对内存地址进行运算,因此
pointertoa + 1会产生一个指针,指向 a 之后的下一个内存位置中的任何内容。我不认为这在 fortran 中是可能的,但无论如何你的乘法没有意义。 -
感谢您使算术清晰。我尝试做的是以下内容。我有一个取决于许多输入变量的程序,其中的一个将在 do 循环内进行更改。但这取决于输入,改变哪一个。然而,循环结构总是相同的,并且参数存储在模块中,以便在大量子程序中可用。现在我想在参数读取部分之后编写一些案例构造,以告诉程序的其余部分哪个是要在循环内改变的参数,并且在循环中我有一个占位符(这里是 a)。
-
如果占位符对每个参数遵循相同的表达式,一切都会完美运行。不幸的是,它没有。当然,我可以在每个点上写一个 if 子句,在哪里使用它,但是程序开头的单个决策点看起来更好,更受控制(在我自己或必须使用的人犯错误的情况下)未来的代码)并且通过计算时间更快。很抱歉回答太长,但你问我要做什么。
-
将您的“我正在尝试做的事情”描述合并到问题本身中。对于那些试图准确理解您要问什么以及您要做什么的人来说,这种背景很重要!
-
对不起,我的目标是尽可能简短。