我想让指针对角线指向矩阵的对角线。代码如下:
program try
implicit none
integer , dimension (3,3), target :: a
integer, dimension(:, :), pointer :: matrix
integer, dimension(:), pointer :: diagonal, base
allocate (base(3*3))
matrix(1:3, 1:3) => base
diagonal => base(1:9:4)
matrix => a
a=reshape([1, 2, 3,4 ,5, 6, 7, 8, 9],[3,3])
print *, diagonal
end program try
但是我得到这个奇怪的数字:17397152 1735357008 1701602145,而不是1,5,9。为什么呢?
当您打印diagonal
时,它指向尚未初始化的base
。数字17397152
、1735357008
和1701602145
未初始化;它们只是报告程序开始前内存中的内容。
我认为混乱来自你对matrix
所做的事情。你最初将matrix
指向base
。然后将matrix
指向a
。然而,这消除了matrix
和base
之间的关联,因此当您初始化a
时,base
不会发生任何变化。
正如@francescalus所指出的,对角线可以用这个答案来指向:如何将指针赋值给矩阵的对角线?
我怀疑这就是你的目的:
program try
implicit none
integer, dimension(3,3), target :: matrix
integer, dimension(:), pointer :: matrix_1d
integer, dimension(:), pointer :: diagonal
! Initialise matrix.
matrix = reshape([1, 2, 3, 4 ,5, 6, 7, 8, 9], [3, 3])
! Point a 1D pointer at the 2D matrix.
matrix_1d(1:9) => matrix
! Point 'diagonal' at the diagonal elements.
diagonal => matrix_1d(1:9:4)
print *, diagonal
end program try