Fortran学习15:指针1 您所在的位置:网站首页 fortran报错5082 Fortran学习15:指针1

Fortran学习15:指针1

2024-07-10 20:00| 来源: 网络整理| 查看: 265

刚开始看到这个的时候我很吃惊,原谅我这个从来不看书籍目录的人,我都不知道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等或是自定义类型,每一种指针变量都占用咸通的内存空间,因为执政变量实际上只是记录内存地址。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有