我在C中有以下程序。我使用malloc为2048x2048的float数组分配空间。我有指向这个数组的指针,我想索引数组索引,如表[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 * columns + j],因为后来我将使用openmp来优化一些for循环和普通数组索引是必须的。我被困在这里,我需要你的帮助。
答案 0 :(得分:2)
这样做的结构方法很好,但你必须访问数组成员:
A = malloc(sizeof ftable);
A.table[3][4] = . . .
答案 1 :(得分:0)
如果您实际上根本不想使用结构(如评论中所示),您可以写:
float (*table)[COLUMNS] = malloc( ROWS * sizeof *table );
然后使用table[row][col]
访问每个单元格。
malloc(N * sizeof *p)
模式,请