在函数中传递具有指针成员的结构是浅拷贝或深拷贝在 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 来完成,但是你必须手写每一个。
在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 来完成,但是你必须手写每一个。