概述
! Fortran 中的指针初探
! 1 标准fortran指针并不代表变量在内存中的地址,
! 而是代表这个变量的别名,相当与C中的引用。
! 通过指针,同一个变量存储单元可以通过多个变量名来访问。
! 2 当指针被声明后,程序并不会立即给它分配存储空间,
! 而是要等到通过allocate语句进行动态内存分配或者通过指针赋值语句
! 与一个目标变量联合起来后才会分配。
! 目标变量都必须在程序的声明阶段被赋予target属性
program helloworld
implicit none
integer :: i, j
integer, pointer :: p1, p2
integer, target :: s = 12
integer, pointer :: a(:)
integer, target :: b(5) = (/1,2,3,4,5/)
integer, target :: c(3,4)
integer, pointer :: d(:,:)
! 对二维数组c的初始化
do j = 1, 4
do i = 1, 3
c(i, j) = (i -1) * 4 + j
end do
end do
print *, ' c = '
do i=1, 3
print *, c(i, :)
end do
! ---------------------以上为初始化工作------------------------
! 1 --------对于单个值的使用---
p1 => s; p2 => s;
s = 20; p1 = 30 ! pointer的改变会影响target值的变化
print *, s, p1, p2
! 2 --------通过指针对数进行一些列操作---
a => b ! 引用整个数组
print *, 'a=>b ', a
a => b(2:4) ! 对数组连续片段的引用
print *, 'a=>b(2:4) ', a
a => b(1:5:2) ! 对数组不连续片段的使用
print *, 'a=>b(1:5:2) ', a
a => b(5:1:-1) ! 引用数组的倒序
print *, 'a=>(5:1:-1) ', a
! 3 ---------一维指针对二维数组片段的引用
a => c(:, 3) ! 引用第三列数据
print *, 'a=>c(:,3) ', a
a => c(2, :) ! 引用第二行数据
print *, 'a=>c(2,:) ', a
! 4 ---------二维指针对二维数组的引用
d => c(1:2, 2:3) ! 引用二维数组中的二维片段
print *, 'd => c(1:2, 2:3)'
do i=1, 2
print *, d(i, :)
end do
d=121 ! 对c(1:2,2:3)中的元素重新赋值
print *, 'c(3, 4)'
do i=1, 3
print *, c(i, :)
end do
! 5 -----------指针当做动态数组来使用
allocate(a(4)) ! 为指针分配空间
do i=1, 4
a(i) = i * 3
end do
print *, 'a(4) = ', a
deallocate(a) ! 为指针释放引用的内存空间
! 6 ---指针的状态可以通筧ssociated(pointer,target)来检查指针是否设置了指向,
! 返回值为逻辑型变量?
! 还可通过NULLIFY来解除指针当前的联合状态,并使其指向不能使用的内存地址。
print *, associated(d)
NULLIFY(d)
print *, associated(d)
end program helloworld
最后
以上就是笨笨冷风为你收集整理的Fortran指针初探的全部内容,希望文章能够帮你解决Fortran指针初探所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复