Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Pointers 为什么Fortran指针需要目标?_Pointers_Fortran - Fatal编程技术网

Pointers 为什么Fortran指针需要目标?

Pointers 为什么Fortran指针需要目标?,pointers,fortran,Pointers,Fortran,为什么指定(5.2.8)必须使用目标关键字来关联指向它的指针?为什么不是每种类型都是有效的目标 比如说,, 整数,指针::px 整数,目标::x x=5 px=>x 是有效的语法,但 整数,指针::px 整数::x x=5 px=>x 无效 为什么一定要这样?fortran中的指针与c中的指针不同。在fortran中,90个指针几乎没有像目标那样的限制。这样做是为了解决速度问题并保证指针使用的安全性。尽管一个调用生成不需要指定目标的可分配指针。深入挖掘,你会发现他们 一个可能被指向的项可

为什么指定(5.2.8)必须使用目标关键字来关联指向它的指针?为什么不是每种类型都是有效的目标

比如说,,

整数,指针::px
整数,目标::x
x=5
px=>x
是有效的语法,但

整数,指针::px
整数::x
x=5
px=>x
无效


为什么一定要这样?

fortran中的指针与c中的指针不同。在fortran中,90个指针几乎没有像目标那样的限制。这样做是为了解决速度问题并保证指针使用的安全性。尽管一个调用生成不需要指定目标的可分配指针。深入挖掘,你会发现他们

一个可能被指向的项可能会被另一个项别名,编译器必须允许这样做。不带target属性的项不应使用别名,编译器可以基于此进行假设,从而生成更高效的代码。

用于更好的编译器优化。当您的代码在1K-100K内核上运行时,速度确实很重要

顺便说一句,并非总是使用目标。例如,在指针用于分配内存的情况下

...
real, pointer :: p(:), x
...
allocate(p(15))
...
x => p(1:5)
...
nullify(x)
deallocate(p)
...

根据编译器的不同,您必须分配(x(5))才能使其工作。@请选择哪个编译器?所显示的一组行似乎是正确的。@user49734 TARGET在这里是不必要的(甚至是禁止的),因为指针始终是“targettable”的。我以前的评论不准确。指针/目标关联可能导致一些非常棘手的情况。如果您对Fortran中的指针/目标关联实践缺乏经验,我建议您进一步阅读。例如,请参见此链接 INTEGER, POINTER :: px INTEGER :: x x = 5 px => x
...
real, pointer :: p(:), x
...
allocate(p(15))
...
x => p(1:5)
...
nullify(x)
deallocate(p)
...