Fortran指针初探

来源:互联网 发布:mac 命令行 u盘路径 编辑:程序博客网 时间:2024/05/16 00:46
! Fortran 中的指针初探! 1 标准fortran指针并不代表变量在内存中的地址,!   而是代表这个变量的别名,相当与C中的引用。!   通过指针,同一个变量存储单元可以通过多个变量名来访问。! 2 当指针被声明后,程序并不会立即给它分配存储空间,!   而是要等到通过allocate语句进行动态内存分配或者通过指针赋值语句!   与一个目标变量联合起来后才会分配。!   目标变量都必须在程序的声明阶段被赋予target属性program helloworldimplicit noneinteger                     :: i, jinteger, pointer            :: p1, p2integer, target             :: s = 12integer, 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 doend doprint *, ' 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 ', aa => b(2:4)                 ! 对数组连续片段的引用print *, 'a=>b(2:4) ', aa => b(1:5:2)               ! 对数组不连续片段的使用print *, 'a=>b(1:5:2) ', aa => b(5:1:-1)              ! 引用数组的倒序print *, 'a=>(5:1:-1) ', a! 3 ---------一维指针对二维数组片段的引用a => c(:, 3)                ! 引用第三列数据print *, 'a=>c(:,3) ', aa => 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 dod=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 * 3end doprint *, 'a(4) = ', adeallocate(a)           ! 为指针释放引用的内存空间! 6 ---指针的状态可以通筧ssociated(pointer,target)来检查指针是否设置了指向,!       返回值为逻辑型变量?!       还可通过NULLIFY来解除指针当前的联合状态,并使其指向不能使用的内存地址。print *, associated(d) NULLIFY(d)print *, associated(d) end program helloworld
0 0
原创粉丝点击