在 C 语言中,深拷贝和浅拷贝是两种不同的内存拷贝方式。它们的区别在于:
1. 浅拷贝只是简单地复制指针或引用,而不是复制对象本身。这意味着,如果原始对象被修改了,那么所有指向该对象的副本也会受到影响。因此,浅拷贝通常只适用于简单的数据类型,如整数、字符等。
2. 深拷贝则是完全复制一个对象,包括其所有成员变量和指向其他对象的指针。这样,即使原始对象被修改了,拷贝出来的对象也不会受到影响。但是,由于深拷贝需要复制整个对象,所以它可能会比较耗时和占用内存。
下面是一个示例,展示了深拷贝和浅拷贝的区别:
```c
#include
#include
#include
typedef struct {
char* name;
int age;
} Person;
int main() {
// 创建一个 Person 对象
Person* p1 = (Person*)malloc(sizeof(Person));
p1->name = (char*)malloc(sizeof(char) * 10);
strcpy(p1->name, "Tom");
p1->age = 20;
// 浅拷贝
Person* p2 = p1;
printf("p1: %s, %d\n", p1->name, p1->age);
printf("p2: %s, %d\n", p2->name, p2->age);
// 修改原始对象
strcpy(p1->