加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

fortran中的指针(1)

(2009-09-23 20:16:37)
标签:

fortran

杂谈

分类: Fortran
指针是一个很有趣的东西,它最简单的应用可以用来保存变量,或者是动态使用内存,或者是用于数据结构。

! 常用语句
! POINTER_C=>NULL();          ! 指针指向NULL
! NULLIFY(PTR_A);             ! 指针指向NULL
! STATUS = ASSOCIATED (C);    ! 如果C有所指向返回TRUE
! STATUS = ASSOCIATED (C, E); ! 如果C指向E返回TRUE,如果C和E指向的目标相同或者二者均为NULL返回TRUE(二者都是指针)


!例子1:
program test
REAL,TARGET::R1=1.0,R2=2.0;
!TARGET::Specifies that an object can become
!the target of a pointer (it can be
!pointed to).
REAL,POINTER::P1,P2;
!Specifies that an object is a pointer (a dynamic variable).
!A pointer does not !contain data, but points to a scalar or array
!variable where data is stored.
!A pointer has no initial storage set aside for it;
!memory storage is created for the pointer as a program runs.

P1=>R1;  !指针P1指向R1的内存地址
P2=>R2;  !指针P2指向R2的内存地址
WRITE(*,*)P1,P2; ! 1.0 2.0
P1=P2; ! P1也指向R2了
WRITE(*,*)P1,P2; ! 2.0 2.0
P1=>R1;
P2=>R2;
P1=>P2; ! 与P1=P2作用相同
WRITE(*,*)P1,P2; ! 2.0 2.0

ALLOCATE(P1);   !为P1分配内存空间
P1=10;   !P1赋值为10
WRITE(*,*)P1;
P1=>P2; ! 如果用了此语句,原来分配的空间丢失,此时执行DEALLOCATE操作出错
DEALLOCATE(P1); ! 释放指针所指向的空间
end program test

指针变量保存的是一个‘内存地址’,当程序要读写指针变量时,实际上会经过两个步骤
(1)取出指针中所保存的内存位置
(2)到这个内存位置读写数据
指针变量所保持的内存地址来由可以有两种:
(1)记录其他非指针变量的内存地址
(2)程序执行中动态分配的一块内存

例子2:
<彭国伦-Fortran 95程序设计>
program ex1001
  implicit none
  integer, target  :: a=1
  ! 声明一个可以当做目标的变量
  integer, pointer :: p   
  ! 声明一个可以指向整数的指针
  p=>a ! 把指针P指到变量a
  write(*,*) p
  a=2  ! 改变a的值
  write(*,*) p
  p=3  ! 改变指针p指向的内存内容
  write(*,*) a
  write(*,*) p
  stop
end


0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有