【问题标题】:Pointer deep copy in CC中的指针深拷贝
【发布时间】:2015-03-14 14:35:09
【问题描述】:

所以我正在用 C 语言为一个学校项目编写一个循环队列,我遇到了以下问题。

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

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

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

我似乎无法为这种方法找到正确的代码,尽管我认为我遗漏了一些微不足道的东西。

*dest_element = src_element 

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

有什么帮助吗?

【问题讨论】:

  • *dest_element = src_element 是可以的,但显然这本身就表明你不需要一个函数。
  • @iharob 这不是指针赋值的正确语法吗 => *dest_element = &src_element;
  • 我确实需要该功能,因为作业要求我们复制到与所需位置不同的文件中。
  • @kkaosninja 使dest元素指向src_element的地址,我需要复制pointee
  • @kkaosninja 不是,因为您正在分配给指针对象。

标签: c pointers copy deep-copy


【解决方案1】:

如果我理解正确,是的,这就是你所需要的

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;

【讨论】:

  • 我想我发现了问题,它在我们提供的测试代码中,它没有取消引用它发送的指针,这就是为什么我只看到地址。
猜你喜欢
  • 2015-07-21
  • 2010-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-09
  • 2016-12-18
  • 1970-01-01
  • 2010-12-16
相关资源
最近更新 更多