我在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)
模式,请参阅此处。