我在Fortran 95/08中编写了一个子程序包,用于用C ++编写的带有iso_c绑定的模拟。我注意到必须调用例程c_loc将Fortran指针转换为C ++指针。为什么?这是做什么的?据我所知,这使得C ++程序可以在记录中锁定指针中的数据,但是什么是指针而不是地址?
Bo Sundman
答案 0 :(得分:2)
Fortran指针通常可以实现为一个地址。在许多情况下(非多态标量){Fort}指针上创建C指针的c_loc()
只是一个演员,仅此而已。 c_f_pointer()
也是如此,它只是非多态标量的演员。
对于多态实体,Fortran指针携带有关动态类型的信息。
对于数组Fortran指针包含数组描述符,该描述符存储第一个元素的地址,每个维度中的等级,下限和上限以及步幅。这就是为什么你必须在c_f_pointers()
中为数组指定维度。
Fortran指针数组可以是非连续的,例如,只是较大数组的子部分。 C中不存在非连续数组指针的等价物。
它与指针别名无关。 Fortran指针允许别名。非指针伪参数不允许别名。