【问题标题】:passing of structure with pointer member in function is shallow copy or deep copy In C在函数中传递带有指针成员的结构是 C 中的浅拷贝或深拷贝
【发布时间】:2018-05-31 06:58:50
【问题描述】:

在 C++ 中,深拷贝有重载的复制构造函数和赋值重载。由于默认可用的是浅拷贝。

在C语言中,具有指针成员的结构,如果传递给函数或分配给已经创建的新结构对象,是深拷贝还是浅拷贝??

例如

struct data {
    int a;
    int *b;
};

void test_func(struct data tes)
{

    tes.a =3;
    int *c = new int[1];
    c[0]=2;
    tes.b =c;
    std::cout<<*tes.b;

}
int main() {
    struct data test;
    int *c = new int;
    *c=4;

    test.a = 1;
    test.b =c;



    std::cout<<*test.b;
    test_func(test);

    std::cout<<*test.b;

}

【问题讨论】:

  • “深拷贝”在 C 中意味着什么?
  • 按值传递总是复制。而C没有“深”或“浅”复制的概念,它所做的基本上是一个memcpy调用。
  • 你的代码和你的问题有什么关系?
  • 你不应该在 C 中使用 malloc 吗?
  • @KillzoneKid 当然。您还应该使用printf。并释放您分配的内存。

标签: c++ c deep-copy shallow-copy


【解决方案1】:

C 中的结构与 memcpy 一样简单地复制。因此,您获得了指针的副本,但没有获得指针指向的内容的副本。在这种情况下,与 c++ 没有什么不同。

如果您愿意,您还可以在 C 中为“深拷贝”编写一个函数。每种 OOP 都可以用 C 完成,但您必须手动编写所有内容。

【讨论】:

    猜你喜欢
    • 2022-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-09
    • 1970-01-01
    • 2018-12-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多