Fortran 中的指针和C++有什么区别

What is the difference between pointer in Fortran and a C++

本文关键字:什么 区别 C++ 指针 Fortran      更新时间:2023-10-16

我在Fortran 95/08中编写了一个子例程包,该包用于C++编写的带有iso_c绑定的模拟。 我注意到必须调用一个例程,c_loc,将Fortran指针转换为C++指针。 为什么? 这是做什么的? 我知道它使C++程序可以在记录指针内砍伐数据,但是指针比地址更重要吗?

博·桑德曼

Fortran指针通常可以实现为一个地址。在许多情况下(非多态标量(,在 Fortran 指针上c_loc()创建 C 指针只是一个强制转换,仅此而已。c_f_pointer()也是如此,它只是非多态标量的强制转换。

对于多态实体,Fortran 指针携带有关动态类型的信息。

对于数组,

Fortran 指针包含数组描述符,该描述符存储第一个元素的地址、秩、每个维度的下限和上限以及步幅。这就是为什么您必须在c_f_pointers()中为数组指定维度的原因。

Fortran 指针数组可能是不连续的,例如,只是较大数组的一个子部分。在 C 中,非连续数组指针没有等效项。

它与指针混叠无关。允许使用伪装指针。不允许使用非指针虚拟参数进行别名。