You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将已赋值Fortran指针的值复制到目标Fortran数组中

问题解决

错误根因

你混淆了Fortran两类操作的作用:

  • 指针关联操作符=>:作用是修改指针的指向目标,你写的f_p => Solution会让f_p直接放弃原本指向的C函数返回的数组,转而指向未初始化的本地数组Solution,所以后续打印才会出现乱码
  • Fortran中只要指针已经和目标内存正确关联,直接写指针变量名就等价于访问指向内存的存储值,不需要类似C语言的*p取值语法

修复方案

你要做的是把C数组里的值复制到Solution数组,不需要修改f_p的指向,直接用普通赋值操作即可。同时建议把Solution的类型改为和C返回数组一致的integer(c_int),避免跨语言类型不匹配隐患。

修改后的Fortran主程序如下:

program Test
    use, intrinsic :: iso_c_binding, only : c_ptr,        &
                    c_f_pointer,  &
                    c_int
  USE FTN_C
  type(c_ptr) :: c_p
  integer(c_int), pointer :: f_p(:)
  ! 类型和C返回数组对齐,避免隐式类型转换问题
  integer(c_int), target :: Solution(10)

 
  c_p = C_LIBRARY_FUNCTION()
  call c_f_pointer(c_p, f_p, [10]) 
  !c_f_pointer assigns the target, cptr, to the Fortran pointer fptr, and specifies its shape.
  
  ! 去掉指针关联,直接赋值:把f_p指向的C数组值复制到Solution数组
  Solution = f_p
  print *, f_p
  print *, Solution

end program Test

运行结果

修改后两个数组的输出完全一致,都是C函数中赋值的0~9:

./a.out
      0      1      2       3       4        5        6        7        8         9
      0      1      2       3       4        5        6        7        8         9

内容的提问来源于stack exchange,提问作者HSSH

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 20:39:01