如何在c++中连接两个结构体类型变量
How can I concatenate two structs type variables in c++?
我一直在尝试一段时间连接一些结构(我定义)类型变量到一个更大的。我得到的基本上是这样的:
我有一个struct和两个struct**类型的变量。我声明了第三个结构体C我想把a和B连接到C中。我尝试的是这样的东西(我现在没有代码,所以我会写一些非常类似的东西,其中一些名称更改了,因为我不记得它们。
struct** A, B;
struct** C;
(我知道A和B,因为我通过调用另一个函数接收它们)
我像这样为C分配内存。
C = (struct**)malloc(sizeof(A)+sizeof(B));
我像这样用内存移动A和B
memcpy(&C, &A, sizeof(A));
memcpy(&C + sizeof(A), &C, sizeof(B));
很明显,我所做的是不正确的,因为似乎所有这些C只包含A。我很确定问题来自"**",我不能很好地处理指针到指针。有人能就我的问题给我一些建议吗?我也不想使用句柄,我必须使用memcpy/memmove。
[update from comment:]
您已经在某处定义了struct A a;
和struct B b;
。要将它们连接到struct C
中,您可以这样做:
struct A a;
struct B b;
struct C{
struct A a;
struct B b;
};
struct C c;
c.a = a;
c.b = b;
不需要指针或memcpy
。
编辑:由于a
和b
是相同的类型,你可以稍微缩短为:
struct Something a, b;
struct C{
struct Something[2];
};
struct C c;
c[0] = a;
c[1] = b;
在c++中,你可以这样做:
using C = std::array<Something, 2>;
C c{a, b};
[Best for C]
就用数组。
假设struct A
被定义为堆栈上的数组
struct A a1 = {...}; /* some initialisation here */
struct A a2 = {...}; /* more initialisation here */
struct A a[2];
a[0] = a1;
a[1] = a2;
或者动态分配:
struct A * pa = malloc(2 * sizeof *pa);
if (NULL != pa)
{
pa[0] = a1;
pa[1] = a2;
/* use pa */
free(pa);
}
else
{
/* handle malloc error */
}
首先,你的代码有一个bug:
memcpy(&C, &A, sizeof(A));
memcpy(&C + sizeof(A), &C, sizeof(B));
应该是
memcpy(&C, &A, sizeof(A));
memcpy(&C + sizeof(A), &B, sizeof(B));
您正在将C复制回C而不是b。
第二,如果你曾经发现自己在摆弄这样的指针,那么你可能在某个地方遇到了设计问题。如果你真的想合并两个结构体,为什么不让结构体C简单地包含结构体A和B呢?
如果你真的想让struct C没有原语,老兄,只要单独分配每个字段就行了。真的有那么多工作吗?我想,如果你期望这些场有很大的变化,推广它是有意义的。但是这种"聪明的代码"恰恰是那种会在以后给你带来麻烦的东西。
相关文章:
- 在两个结构之间共享数组
- C++ 如何从函数传递两个结构?
- 如何认为两个结构相等,而不管它们的第二个属性如何?
- 使用用户函数在 C++ 中交换两个结构
- 在CPP中互相访问的两个结构
- 函数的两个变体,中间有简单的if语句
- 如何实现 std::map::查找包含两个结构'Pos'结构的比较逻辑,每个结构包含 x 和 y 坐标
- 将两个变体与Boost static_visitor进行比较
- 当我们在两个结构上使用它时,= 运算符会做什么
- 合并/连接两个结构
- C++(SDL2)中的碰撞函数.如何传递存储在不同向量中的两个结构
- 具有相同名称和不同模板参数的两个结构如何工作
- 复制两个结构指针时出现分段错误
- Xcode 不链接两个结构
- 在cocos2d-xv3.2中相交或重叠的两个动力学体
- 在两个结构(函子)中理解typedef的作用域
- 如何在c++中比较两个结构字符串
- 设置两个结构体相等后,指针为NULL
- 如何声明具有other类型成员的两个结构体
- 如何在c++中连接两个结构体类型变量