gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 08:28:37 24 4
gpt4 key购买 nike

我在 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 一 block 坚实的内存,这就是我使用包含所需表的结构的原因。

#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 循环并且需要正常的数组索引.我被困在这里,需要你的帮助。

最佳答案

这样做的结构方式很好,但是你必须访问数组成员:

A = malloc(sizeof ftable);

A.table[3][4] = . . .

关于c - 在 malloc 实体内存块中使用标准数组索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29357863/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com