我有一些关于2D数组的基本问题,例如:
double bn[NNODES][NBASIS]
1 - C中的声明如何?在Fortran?
2 - 第一个[]用于行号,第二个用于列,用于C和Fortran吗?
3-使用bn时,例如bn [i] [j],“i”索引用于行,“j”用于列?在C和Fortran都有?
4-只有一个(例如i = 15)和整行的写/打印功能(C和Fortran)如何?
由于
答案 0 :(得分:3)
一些例子是方形矩阵,它掩盖了一个问题。 C和Fortran对多维数组使用不同的内存布局。 C是行专业,而Fortran是专业。见http://en.wikipedia.org/wiki/Row-major_order。在语言之间工作时,可以方便地在声明中处理它,例如在C:
中double array [20][10];
在Fortran中,使用iso_c_binding
内在模块:
real (C_DOUBLE), dimension (10,20) :: array
答案 1 :(得分:1)
1 - C中的声明如何?在Fortran?
在C中,您声明一个静态数组:int arr[row][col];
2 - 第一个[]用于行号,第二个用于列,用于C和Fortran吗?
如果将2D数组的第一个或第二个下标视为行或列下标,则无关紧要。重要的是你保持在一定范围内。 arr[0][0]
至arr[row - 1][col - 1]
。
3-使用bn时,例如bn [i] [j],“i”索引用于行,“j”用于列?在C和Fortran都有?
见答案2.
4-只有一个(例如i = 15)和整行的写/打印功能(C和Fortran)如何?
使用for
循环访问数组中的单个行或列。例如,要访问第0行中的所有元素:
for(int c = 0; c < col; ++)
printf("%d\n", arr[0][c]);
答案 2 :(得分:0)
1 - C中的声明如何?在FORTRAN?
在C
double bn[10][10];
FORTRAN
double precision bn(10, 10)
2 - 第一个[]用于行号,第二个用于列,用于C和Fortran?
是。
3-使用bn时,例如bn [i] [j],“i”索引用于行,“j”用于列?在C和Fortran都有?
是。
4-只有一个(例如i = 15)和整行的写/打印功能(C和Fortran)如何?
FORTRAN
do, i=1:10
do, j=1:10
write (*,*) bn(i,j)
enddo
enddo
在C
for(i = 0; i < 10, i++)
for(i = 0; i < 10, i++)
printf("%f", bn[i][j]);