在函数中传递具有指针成员的结构是浅拷贝或深拷贝在C中

时间:2018-05-31 06:58:51

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

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

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

E.g

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;

}

1 个答案:

答案 0 :(得分:4)

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

在C中你也可以为&#34;深拷贝&#34;写一个函数。如果你喜欢。每种OOP都可以用C来完成,但你必须手工编写每一个OOP。