Sha*_*ars 10 c deep-copy shallow-copy
我尝试使用谷歌搜索,但只有反对的语言弹出结果.
根据我的理解,浅拷贝是复制结构的某些成员.
所以让我们说结构是
typedef struct node
{
char **ok;
int hi;
int yep;
struct node *next;
}node_t
Run Code Online (Sandbox Code Playgroud)
复制char**将是一个浅拷贝
但复制整个链表是一个深层复制?
我有正确的想法还是我离开了?谢谢.
小智 22
在这个特定的上下文中,浅层副本意味着您将"引用"(指针,无论如何)复制到对象,并且这些引用或指针的后备存储是相同的,它是同一内存位置上的完全相同的对象.
相反,深层复制意味着您复制整个对象(结构).如果它具有可以浅或深复制的成员,您还可以对它们进行深层复制.请考虑以下示例:
typedef struct {
char *name;
int value;
} Node;
Node n1, n2, n3;
char name[] = "This is the name";
n1 = (Node){ name, 1337 };
n2 = n1; // Shallow copy, n2.name points to the same string as n1.name
n3.value = n1.value;
n3.name = strdup(n1.name); // Deep copy - n3.name is identical to n1.name regarding
// its *contents* only, but it's not anymore the same pointer
Run Code Online (Sandbox Code Playgroud)