gpt4 book ai didi

arrays - 内存中连续的结构数组

转载 作者:行者123 更新时间:2023-12-01 06:41:33 29 4
gpt4 key购买 nike

我想创建一个具有动态数组的结构数组:

typedef struct{
float a;
int b[];
}structure_t;

n = ...;
size_t dimstruct = sizeof(structure_t)+n*sizeof(int);
structure_t * resultat = malloc(dimstruct);

如何创建这种结构的动态数组并在内存中连续?

谢谢!

最佳答案

你有正确的想法。您编写的代码使用 C99 样式的灵活成员为具有可变大小数组的结构分配空间。同样的技巧也适用于 C90-style zero-length array1-sized array .

该结构通常包含一个成员来指定可变长度部分的大小,尽管这显然不是必需的。但是你可以看到这是如何制作这些结构的数组的问题。

一般来说

structure_t my_array[5];
...
my_array[2].a = 0.0;

是相同的
(structure_t*)((void*)my_array + 2*sizeof(structure_t))->a = 0.0;

但什么是 sizeof我们的动态结构?无论发生什么评估,这显然是我们想要的,因为它不包括可变部分。

所以我们可以通过做来分配这些结构的数组
void *result = malloc(arraysize * dimstruct);

它将是连续的。但是我们不能使用数组索引语法,因为结构的大小是未定义的。相反,我们手动索引,如上所示:
structure_t *p = result + i * dimstruct;
p->a = 0.0;

请注意 resultvoid * .如果我们将其声明为 structure_t *偏移量计算将是错误的,因为它将使用 sizeof(structure_t) 的倍数

关于arrays - 内存中连续的结构数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9874717/

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