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 |