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

时间:2017-05-27 12:33:57

标签: c++ pointers fortran

我在Fortran 95/08中编写了一个子程序包,用于用C ++编写的带有iso_c绑定的模拟。我注意到必须调用例程c_loc将Fortran指针转换为C ++指针。为什么?这是做什么的?据我所知,这使得C ++程序可以在记录中锁定指针中的数据,但是什么是指针而不是地址?

Bo Sundman

1 个答案:

答案 0 :(得分:2)

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

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

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

Fortran指针数组可以是非连续的,例如,只是较大数组的子部分。 C中不存在非连续数组指针的等价物。

它与指针别名无关。 Fortran指针允许别名。非指针伪参数不允许别名。