FORTRAN中的POINTER关键字等效于C / C ++

时间:2015-09-24 03:53:01

标签: c++ c fortran

我遇到了以下情况:

POINTER(A,B(*)) ;INTEGER B

上述代码的 C / C ++等效是什么?

最后;INTEGER B是什么?

2 个答案:

答案 0 :(得分:6)

根据上面的page,Cray指针和C指针之间的对应关系可能是这样的(但是,请注意,Cray指针与现代Fortran中的标准化指针不同)。

的Fortran:

integer    a( 3 ), i
integer*8  ptr
pointer( ptr, b(*) ); integer b

a(:) = 10
print *, "a = ", a( 1:3 )

ptr = loc( a(1) )    !! now b(i) becomes an alias of a(i) for i=1,2,3
b( 2 ) = 30

print *, "b = ", b( 1:3 )
print *, "a = ", a( 1:3 )

C:

int i, a[ 3 ] = { 10, 10, 10 };
int *ptr, *b;

printf( "a = %d %d %d\n", a[0], a[1], a[2] );

ptr = &( a[0] );   // <--> ptr = loc( a(1) ) in Fortran
b = ptr;           // <--> pointer( ptr, b(*) ) in Fortran

b[ 1 ] = 30;

printf( "b = %d %d %d\n", b[0], b[1], b[2] );
printf( "a = %d %d %d\n", a[0], a[1], a[2] );

编译

gfortran -fcray-pointer test.f90
gcc test.c

a = 10 10 10
b = 10 30 10
a = 10 30 10

答案 1 :(得分:3)

正如评论正确地说前半部分是(非标准)cray指针构造,在分号后是一个简单的声明;这是一个非常奇怪的编程时代组合!

有关Cray Pointers的更多信息,请访问

https://www.sharcnet.ca/help/index.php/Using_CRAY_POINTERS_in_a_FORTRAN_90_PROGRAM