我已经用Fortran95/08编写了一个子例程包,用于用C++编写的带有iso_c绑定的模拟。我注意到,要将Fortran指针转换为C++指针,必须调用例程c_loc。为什么?这是做什么的?我知道这使得C++程序能够访问记录指针中的数据,但是什么是比地址更重要的指针呢?
博·桑德曼
发布于 2017-05-27 21:01:43
Fortran指针通常可以实现为一个地址。在许多情况下(非多态标量),在Fortran指针上创建C指针的c_loc()只是一个强制转换,仅此而已。对于c_f_pointer()也是一样,它只是对非多态标量的强制转换。
对于多态实体,Fortran指针携带有关动态类型的信息。
对于数组,Fortran指针包含数组描述符,它存储第一个元素的地址、每个维度中的秩、上下界和步长。这就是为什么必须在c_f_pointers()中指定数组的维度。
Fortran指针数组可以是不连续的,例如,只是较大数组的一个子部分。在C中没有非连续数组指针的等价物。
它与指针别名没有任何关系。允许Fortran指针作为别名。不允许使用非指针伪参数作为别名。
https://stackoverflow.com/questions/44216929
复制相似问题