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

passing of structure with pointer member in function is shallow copy or deep copy In C

在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 中的结构与 memcpy 一样被简单地复制。所以你得到了指针的副本,而不是指针指向的内容的副本。在这种情况下,与 C++ 没有什么不同。

在 C 中,您也可以根据需要为 "deep copy" 编写一个函数。各种 OOP 都可以用 C 来完成,但是你必须手写每一个。