Fortran Coder

查看: 6918|回复: 4
打印 上一主题 下一主题

[指针] 数组指针参数在返回时为什么改变了指向的数据?

[复制链接]

954

帖子

0

主题

0

精华

大师

F 币
184 元
贡献
75 点

规矩勋章元老勋章新人勋章水王勋章热心勋章

QQ
楼主
发表于 2018-11-26 11:18:23 | 显示全部楼层
fortran的指针并不能实现:一部分指向A,一部分指向B
所以,当你
DO i=1, nrow
        data_2d(i:i, 1:ncol) => data_1d(1+(i-1)*ncol : (i-1)*ncol+ncol)
END DO
这个循环第k次的时候,data_2d 的大小就变成了 data_2d(k:k,:) ,大小是 1*ncol ,而不是 k*ncol

你可以用下面的方法,实现把一个二维数组指针,指向一维数组。

[Fortran] 纯文本查看 复制代码
PROGRAM MAIN
  use , intrinsic :: ISO_C_Binding
    implicit none
    REAL, DIMENSION(12), TARGET :: arr
    REAL, DIMENSION(:, :), POINTER :: p_2d
    INTEGER :: i
    arr = (/1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12/)
    call c_f_pointer( c_loc(arr) , p_2d , [3,4])
    PRINT *, "===================================="
    DO i=1, 3
      PRINT *, p_2d(i, :)
    END DO
END PROGRAM MAIN
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-5-8 08:26

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表