主题:[讨论]请诸位大神看看以下代码哪儿的区别
我准备调用子程序给3个数从小到大排序,然后用指针作为参数传递,用module模块,编译没问题
刚开始的时候,我自己写了个排序算法,如module_1,在子程序里面能正常排序,但子程序返回给主程序时,数值变了,感觉变成了随机赋值的结果,运行结果如下:
module module_1
contains
subroutine sortb(pb1,pb2,pb3)
implicit none
real,pointer :: pb1,pb2,pb3
real,target ::temp1,temp2,temp3
temp1=max(pb1,pb2,pb3)
temp2=min(pb1,pb2,pb3)
if (pb1>temp2.and.pb1
else if(pb2>temp2.and.pb2
else if(pb3>temp2.and.pb3
endif
pb1=>temp2
pb2=>temp3
pb3=>temp1
print *, "subroutine:",pb1,pb2,pb3
return
endsubroutine
endmodule
module module_2
contains
subroutine sortb(pb1,pb2,pb3)
implicit none
real,pointer :: pb1,pb2,pb3
real :: temp
if (pb1>=pb2)then
temp=pb2
pb2=pb1
pb1=temp
endif
if (pb1>=pb3)then
temp=pb3
pb3=pb1
pb1=temp
endif
if (pb2>=pb3)then
temp=pb3
pb3=pb2
pb2=temp
endif
print *, "subroutine:",pb1,pb2,pb3
return
end subroutine
end module
program test
use module_2
implicit none
real,pointer :: pb1,pb2,pb3
real,target :: a=1,b=2,c=3
pb1=>a
pb2=>b
pb3=>c
call sortb(pb1,pb2,pb3)
write(*,*)"main:", pb1,pb2,pb3
end program