将指向struct的指针复制到指向C中结构副本的新指针

时间:2016-06-16 19:19:25

标签: c pointers copy

我有这种情况,我想在一些哈希表(链表)中存储指向结构的指针 我有:

struct Base {
 int age;
};

struct Base *l1 = malloc(sizeof(struct Base )); 
l1->age = 20;

现在我在这里卡在了代码中(内心深处) 我有功能,它给我指向基地

的指针
callback_(struct Base *l)
{

我不想指向l1,当回调结束时它将消失 我想创建一个新的指针,指向l1(年龄)

的值
struct Base  *l2 = ???;

我需要复制每个值吗? (深拷贝) 在现实中有很多成员和分配数据所以我需要更好的东西然后深层复制

1 个答案:

答案 0 :(得分:2)

如何管理这种情况有两种方法。你可以在回调中创建新的struct对象并执行" flat"结构的副本或编写自己的函数来复制对象。这与保留隐式复制构造函数或在C ++中编写自己的复制构造函数类似。

选项1:

callback_(struct Base *l)
{
    struct Base  *l2 = malloc(sizeof *l2);
    *l2 = *l;
    // ...
}

选项2:

struct copyBase* Base(struct Base* op)
{
    struct Base* this = malloc(sizeof *this);
    this->age = op->age;

    return this;
}

您可以在回调中使用它,如下所示:

callback_(struct Base *l)
{
    struct Base  *l2 = copyBase(l);
    // ...
}