指针深拷贝在C中

时间:2015-03-14 14:35:10

标签: c pointers copy deep-copy

所以我在C中为一个学校项目编写一个循环队列,我有以下问题。

在某些方法中,我使用指针,我需要复制它们。为了让队列适用于所有数据类型,我使用定义的element_t类型。这可以在调用队列的main.c中声明。

事情是这个复制功能必须在同一个main.c中实现。 由于它是一个学校项目,我们已经获得了标题,因此复制的方法如下所示:

void element_copy(element_t *dest_element, element_t src_element)
{}

我似乎无法为这种方法找到合适的代码,尽管我认为我错过了一些微不足道的东西。

*dest_element = src_element 

似乎只是复制src元素值而不是它 指针对象。

对此有何帮助?

1 个答案:

答案 0 :(得分:0)

如果我理解正确,那就是你需要的全部

void element_copy(element_t *dest_element, element_t src_element)
 {
    /* prevent undefined behavior */
    if (dest_element == NULL)
        return;
    *dest_element = src_element;
 }

如果您愿意,可以包含string.h然后

void element_copy(element_t *dest_element, element_t src_element)
 {
    /* prevent undefined behavior */
    if (dest_element == NULL)
        return;
    memcpy(dest_element, &src_element, sizeof(src_element));
 }

但以上都没有意义,因为样本用法是

element_t x;
element_t y;

memset(&x, 0, sizeof(x));
element_copy(&y, x);

完全相同
element_t x;
element_t y;

memset(&x, 0, sizeof(x));
y = x;