在函数中传递具有指针成员的结构是浅复制还是深复制在C中

Lax*_*iya -2 c c++ deep-copy shallow-copy

在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;

}
Run Code Online (Sandbox Code Playgroud)

Kla*_*aus 5

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

如果您愿意,您还可以在 C 中编写“深复制”函数。每种类型的 OOP 都可以用 C 来完成,但你必须手动编写所有内容。