c-在内存的malloc实心块中使用标准数组索引



我在C中有以下程序。我使用malloc为2048x2048的浮点数组分配空间。我有指向这个数组的指针,我想用数组索引(如表[1][2])进行索引。

我知道我可以这样使用malloc:

float ** table;
table = (float **) malloc(2048*sizeof(float*));
for(i=0;i<2048;i++)
    table[i]=(float *) malloc(2048*sizeof(float));
//now table[1][2] works just perfect

但我更喜欢malloc一段坚实的内存,这就是为什么我使用了一个包含所需表的结构。

#include <stdio.h>
#include <stdlib.h>
struct ftable
{
    float table[2048][2048];
};
typedef struct ftable ftable;
int main(void)
{
    ftable * A_table;
    A_table = (ftable *)malloc(sizeof(ftable));
    if (!A_table)
    {
        puts("Error allocating memory...");
        exit(1);
    }
    float * A;
    A = (float *)A_table;
    float ** B;
    B = (float **)A_table;
    //I want to access A[1][2]
    //------------   1st way  -------------- works ok
    A[1 * 10 + 2] = 5.0;
    //or
    *(A + 12) = 5.0;
    //------------   2nd way  -------------- doesn't work
    B[1][2] = 5.0;
    //finish
    free(A_table);
    getchar();
    return 0;
}

我想以这种方式对数组进行索引:A[I][j],而不是像A[I*column+j],因为稍后我将使用openmp来优化一些for循环,并且需要正常的数组索引。我被困在这里,我需要你的帮助。

结构的方法很好,但您必须访问数组成员:

A = malloc(sizeof ftable);
A.table[3][4] = . . .

如果您实际上根本不想使用结构(如注释中所建议的),您可以编写:

float (*table)[COLUMNS] = malloc( ROWS * sizeof *table );

然后使用CCD_ 1来访问每个小区。

如果您不熟悉malloc(N * sizeof *p)模式,请参阅此处。

相关内容

  • 没有找到相关文章

最新更新