|  | 
 
| 我今天写了一个关于矩阵展开的函数,作用是将四维数组沿每个维度展成二维矩阵,调用展开函数的时候发现了问题,我声明的指针数组在指向子函数中生成的二维矩阵时,数组每行最后两个值丢失,变成了极小数。是我指针传递过程中地址出现了问题嘛,请各位老师指教。附代码如下:program main    implicit none !声明接口
 interface
 subroutine PMF_unfold(A,ncmpx,ncmpy,nhx,nhy,f,B)
 integer::icmpx,icmpy,ihx,ihy,m,n,f
 integer::ncmpx,ncmpy,nhx,nhy
 real*4::A(ncmpx,ncmpy,nhx,nhy)
 real*4,pointer::B(:,:)
 real*4,target::B1(ncmpx,ncmpy*nhx*nhy),B2(ncmpy,ncmpx*nhx*nhy),B3(nhx,ncmpx*ncmpy*nhy),B4(nhy,ncmpx*ncmpy*nhx)
 end subroutine
 end interface
 integer::icmpx,icmpy,ihx,ihy,f
 real*4,allocatable::A1(:,:,:,:),A2(:,:,:,:)
 real*4,allocatable,target::B1(:,:),B2(:,:),B3(:,:),B4(:,:)
 real*4,pointer::B(:,:)
 integer::ncmpx,ncmpy,nhx,nhy
 ncmpx=3
 ncmpy=4
 nhx=5
 nhy=6
 allocate(A1(ncmpx,ncmpy,nhx,nhy))
 allocate(A2(ncmpx,ncmpy,nhx,nhy))
 allocate(B1(ncmpx,ncmpy*nhx*nhy),B2(ncmpy,ncmpx*nhx*nhy),B3(nhx,ncmpx*ncmpy*nhy),B4(nhy,ncmpx*ncmpy*nhx))
 !生成四维数组
 do ihy=1,nhy
 do ihx=1,nhx
 do icmpy=1,ncmpy
 do icmpx=1,ncmpx
 A1(icmpx,icmpy,ihx,ihy)=icmpx+(icmpy-1)*ncmpx+(ihx-1)*ncmpx*ncmpy+(ihy-1)*nhx*ncmpx*ncmpy+1000
 end do
 end do
 end do
 end do
 f=4
 !调用展开函数
 call PMF_unfold(A1,ncmpx,ncmpy,nhx,nhy,f,B)
 write(*,*)B(3,:)输出指针B
 deallocate(B1,B2,B3,B4)
 deallocate(A1,A2)
 pause
 end program
 
 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 subroutine PMF_unfold(A,ncmpx,ncmpy,nhx,nhy,f,B)
 implicit none
 integer::icmpx,icmpy,ihx,ihy,m,n,f
 integer::ncmpx,ncmpy,nhx,nhy
 real*4::A(ncmpx,ncmpy,nhx,nhy)
 real*4,pointer::B(:,:)
 real*4,target::B1(ncmpx,ncmpy*nhx*nhy),B2(ncmpy,ncmpx*nhx*nhy),B3(nhx,ncmpx*ncmpy*nhy),B4(nhy,ncmpx*ncmpy*nhx)
 if(f==4)then!当F等于四时
 do ihy=1,nhy
 do ihx=1,nhx
 do icmpy=1,ncmpy
 do icmpx=1,ncmpx
 m=ihy
 n=(ihx-1)*ncmpy*ncmpx+(icmpy-1)*ncmpx+icmpx
 B4(m,n)=A(icmpx,icmpy,ihx,ihy)
 end do
 end do
 end do
 end do
 B=>B4(:,:)
 end if
 
 end subroutine
 
 
   
 
 
 | 
 |