我遇到了以下情况:
POINTER(A,B(*)) ;INTEGER B
Run Code Online (Sandbox Code Playgroud)
什么是上述代码的C/C++等价物?
什么是;INTEGER B最后的?
根据上面的页面,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 )
Run Code Online (Sandbox Code Playgroud)
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] );
Run Code Online (Sandbox Code Playgroud)
编
gfortran -fcray-pointer test.f90
gcc test.c
a = 10 10 10
b = 10 30 10
a = 10 30 10
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
218 次 |
| 最近记录: |