gpt4 book ai didi

连续空间中的复杂结构偏移

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

我想知道是否有一个优雅的替代方案:

struct A{
uint64_t w;
uint64_t x;
uint64_t y;
uint64_t z;
};

struct B{
uint32_t a;
uint16_t b;
};

void function(uint32_t length){
//we have one struct A at the head and multiple struct B.
struct B *ptr = malloc (length * sizeof B + sizeof A);

//we set random values in the head:
struct A * tmp = (struct A*)ptr;
tmp->w = 1000;
tmp->x = 1200;
tmp->y = 99;
tmp->z = ~(0ULL);

/*then we set the first element of type B.
*this is where my question lies
*/
// put the pointer at the right position:
tmp++;
//convert that position again:
struct B * right_position = (struct B*)tmp;

...// do things with B type.

}

显然,像这样安装会更简单:

struct root{
struct A child1;
struct B *child2;
}

但我的问题更多是关于如何在不编写 tmp++ 的情况下正确标记这些偏移量。

如何在不使用 tmp++ 的情况下直接访问该数组中的第一个 B 元素?

同样,这不是我在实际代码中的做法。这只是..一种我们在这里讨论的艺术,如果你愿意的话:)

最佳答案

也许 struct B * right_position = (struct B*)((char *)ptr + sizeof(A));。 (char *) 转换将使计算以字节为单位执行。

关于连续空间中的复杂结构偏移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33946692/

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