如何像在C+中一样在Fortran中使用带指针的结构+;? 我用C++已经好几年了。然后我决定使用Fortran来提高数学性能。在C++中,我有如下的结构:我使用的是: structure BitMap{ char* rgba; // pointer to the color array int w, h;}; // dimension of my bitmap

如何像在C+中一样在Fortran中使用带指针的结构+;? 我用C++已经好几年了。然后我决定使用Fortran来提高数学性能。在C++中,我有如下的结构:我使用的是: structure BitMap{ char* rgba; // pointer to the color array int w, h;}; // dimension of my bitmap,fortran,Fortran,另一方面,在Fortran中: Program Bitmap_p implicit none type BitMap character :: rgba(*) ! like a pointer to bitmap array (colors and alpha) integer:: w ! bitmap width integer:: h ! bitmap height endtype BitMap endprogram Bitmap_p 但是,在编译时,编译器会声明: f90(4):错误

另一方面,在Fortran中:

Program Bitmap_p
implicit none
type BitMap
character :: rgba(*) ! like a pointer to bitmap array (colors and alpha)
integer:: w  ! bitmap width
integer:: h  ! bitmap height
endtype BitMap
endprogram Bitmap_p
但是,在编译时,编译器会声明:

  • f90(4):错误#6530:此组件的数组规范必须是显式形状,并且每个绑定必须是初始化表达式。[RGBA]

  • 您应该能够使用fortran中的
    类型
    指针
    ,来完成C中的
    结构
    *
    所能完成的任务

    Program Bitmap_p
    implicit none
    type BitMap
    character, pointer :: rgba(:) ! like a pointer to bitmap array (colors and alpha)
    integer:: w  ! bitmap width
    integer:: h  ! bitmap height
    endtype BitMap
    
    type(BitMap) :: bmap
    
    bmap%w = 10
    bmap%h = 10
    allocate( bmap%rgba(4*bmap%w*bmap%h) )
    
    endprogram Bitmap_p
    

    对不起,为了我的英语。我在努力避免语法错误。但是对我来说这很困难。指针和C++和FORTRAN中的字符串都有很大的不同。您已经将C++中的指针翻译成FORTRAN中的字符串。这两个不是等价的(实际上指针在C++和FORTRAN中的操作不同,而且C++和FORTRAN之间的字符串也不同)。我确信你们理解我的目标。我能用什么道奇呢?当然,我不能说fortran有明显的速度优势。我只使用simd并行“从盒子里”,这对我来说非常舒服。我的意思是:(x,y)=(x0,y0)+k×(dx,dy)通过xmm寄存器。使字符数组可分配而不是指针很可能是更好的Fortran风格-应尽可能避免指针,可分配项避免了与它们相关的许多风险。如果可能,是的(对于C++字符指针来说也是一样)。我假设OP知道如何在C++中处理它们,同样的方法也应该在这里工作。如果你对答案感到满意,请接受它——这就是表示感谢的方式。非常感谢。但我不知道我的数组的大小。我需要把一个完整的结构(C++中创建和初始化的结构)传递给FORTRAN子程序来执行。若我不是按结构而是按一个接一个地将参数传递给FORTRAN子例程,那个么它将是大约12-15个参数的列表。例如:外部“C”绘图(sbmp*bmp、smatrix*matr、spoints*点),每个结构都有2-3个指针。我需要在FORTRAN中创建什么单元来作为子例程的参数进行操作?对不起。我还不明白该怎么做[接受]。但我会努力的。