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
! 常用语句
! POINTER_C=>NULL();
! NULLIFY(PTR_A);
! STATUS = ASSOCIATED (C);
! 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;
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=10;
WRITE(*,*)P1;
!
DEALLOCATE(P1); ! 释放指针所指向的空间
end program test
指针变量保存的是一个‘内存地址’,当程序要读写指针变量时,实际上会经过两个步骤
(1)取出指针中所保存的内存位置
(2)到这个内存位置读写数据
指针变量所保持的内存地址来由可以有两种:
(1)记录其他非指针变量的内存地址
(2)程序执行中动态分配的一块内存
例子2:
<彭国伦-Fortran 95程序设计>
program ex1001
end