C / Fortran 2D阵列(基本)

时间:2013-12-01 19:36:02

标签: c arrays fortran

我有一些关于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)如何?

由于

3 个答案:

答案 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]);