Fortran学习15:指针1

刚开始看到这个的时候我很吃惊,原谅我这个从来不看书籍目录的人,我都不知道Fortran这么老的语言居然有指针,这不得好好的和c++比较一下。

先看看书里对指针的定义:

指针是一种间接使用数据的方法,指针变量用来保存一个内存地址,当程序要读写指针变量的时候,实际上要经过两个步骤:

        1、取出指针中所保存的内容位置

        2、到这个内存位置去读写数据。

指针变量所保存的内存地址的来源有两种:

        1、记录其他非指针变量的内存位置

        2、程序执行中动态配置一块内存

最基本的指针运行,就是把指针变量拿来记录另外一个目标变量的地址,在经过指针来读写数据。

Fortran这个还不是c++这种:

int *q

人直接时pointer

跟着书来一个:

program main
    implicit none
    integer,TARGET::a=1
    !声明一个可以当成目标的变量
    integer,pointer::p
    ! 声明一个可以指向整数的指针
    p=>a
    !把指针p指到变量a
    write(*,*)p
    a=2
    write(*,*)p
    p=3
    write(*,*)a
stop "over"
end 

声明中有一个target的变量,这种变量可以把他的内存地址赋值给指针变量。

也可以这样子:

program main
    implicit none
    integer,POINTER::p
    ALLOCATE(p)
    !配置一块可以存放integer的内存空间给p 
    p=100
    ! 得到内存后的指针p可以像一般整数一样来使用
    write(*,*)p
    stop
end 

经过allocate的指针,要使用deallocate释放,如果不先deallocate就重新设置指针p的指向,就会导致内存空间浪费。

可以用associated(pointer,【target】)来判断指针是否已经设置指向

如果是null()的话,就会返回一个不能使用的内存地址,在指针还没指向前设置成这个值,associated就不会报错。

也可以用nullify(pointer1,【pointer2、pointer3...】)也可以把指针设置成没有指向任何内存地址。

来一个实验:

program main
    implicit none
    integer,POINTER::a=>null()
    integer,TARGET::b=1,c=2
    write(*,*)ASSOCIATED(a)
    ! false,这个时候啊还没有被赋值
    a=>c
    write(*,*)ASSOCIATED(a)
    ! true,a已经被赋值
    write(*,*)ASSOCIATED(a,c)
    ! true,a指向c
    write(*,*)ASSOCIATED(a,b)
    ! false,a不指向b
    NULLIFY(a)
    ! 把指针a设为没有指向
    write(*,*)ASSOCIATED(a)
    ! false,a还没有被赋值
    stop "over"
end 

 指针可以声明成任何数据类型,甚至是type来自定义的数据类型。,不论integer、real等或是自定义类型,每一种指针变量都占用咸通的内存空间,因为执政变量实际上只是记录内存地址。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值