Fortran Coder

标题: 如何理解Fortran指针的本质? [打印本页]

作者: navoski    时间: 2021-6-20 18:21
标题: 如何理解Fortran指针的本质?
一些资料中说Fortran指针是一种数据对象,它包含特定对象的更多信息,例如类型、维度、各维度元素数、内存地址等。这不同于其它大多数编程语言。
彭国伦书中说指针实际上记录内存地址,每种类型的指针在32位机上就是4字节,不论其指向什么数据类型。

到底哪种说法正确?还是说将指针理解成变量的别名更好?

因为我是初学,所以问题没办法聚焦。能得到各位的指点,谢谢!

作者: fcode    时间: 2021-6-20 22:29
指向单变量的指针(无论其指向变量的数据类型,甚至派生类型),如彭国论说的一样。是记录的内存地址。
指向数组的指针,是一种数据对象,它包含特定对象的更多信息,例如类型、维度、各维度元素数、内存地址等。
(Fortran的指向数组的指针,不但知道数组首元素的地址。还知道数组的维度,各维度大小,上下限和间距!!是的,没错,Fortran的数组在内存里不一定是连续的)
不能理解为“别名”

作者: navoski    时间: 2021-6-21 10:24
fcode 发表于 2021-6-20 22:29
指向单变量的指针(无论其指向变量的数据类型,甚至派生类型),如彭国论说的一样。是记录的内存地址。
指 ...

谢谢大神!
作者: navoski    时间: 2021-6-21 10:50
fcode 发表于 2021-6-20 22:29
指向单变量的指针(无论其指向变量的数据类型,甚至派生类型),如彭国论说的一样。是记录的内存地址。
指 ...

您好,
确实如你所说,《modern fortran》p28中的介绍,“在数组的情况下,只声明秩(维数),边界(以及形状)是从它所指向的对象中选取的。给定这样的声明,编译器会为描述符安排存储空间,该描述符稍后将保存实际对象(称为目标)的地址,如果是数组,还保存其边界和步长。”
但同时,《modern fortran》将fortran指针解释为An object that can be made to refer to other objects in this way is called a pointer。其他一些资料也会使用引用、变量别名的说法。感觉上“别名”的说法能解释fortran指针的效果。
您觉得呢?
作者: fcode    时间: 2021-6-21 14:22
指针使用起来“像”别名一样。但实质并不是别名,而是目标的一种引用和描述。




欢迎光临 Fortran Coder (http://bbs.fcode.cn/) Powered by Discuz! X3.2