C语言中结构体的深拷贝和浅拷贝
一、结构体的浅拷贝
1.结构体的浅拷贝是把一个结构体的内容拷贝到另外一个结构体,仔细看代码就可以
#include <stdlib.h>
#include <string.h>
#include <windows.h>
typedef struct teacher
{
char *name;
int age;
}teacher;
int main()
{
teacher t1;
t1.name = (char*)malloc(30);//给name动态分配空间
strcpy(t1.name, "liming");//把文字常量区的内容拷贝给t1.name
t1.age = 22;
teacher t2 = t1;//结构体的浅拷贝
printf("%s %d", t2.name, t2.age);
if (t1.name != NULL) //释放分配给t1.name 的堆区空间
{
free(t1.name);
t1.name = NULL;
}
//C语言中不能存在二次释放,会导致程序崩溃,画出内存图,可以看到t1.name和t2.name指向同一内存
//if (t2.name != NULL)
//{
// free(t2.name);
// t2.name = NULL;
//}
return 0;
}
2.结构体的深拷贝
给t2单独分配一块空间进行拷贝,代码如下:
#include <stdio.h>
#include <stdlib.h>
typedef struct teacher
{
char *name;
int age;
}teacher;
int main()
{
teacher t1;
t1.name = (char*)malloc(30);
strcpy(t1.name, "lily");
t1.age = 22;
teacher t2;
t2 = t1;
t2.name = (char*)malloc(30);//给t2.name重新分配空间
strcpy(t2.name, t1.name);
printf("%s %d", t2.name, t2.age);
if (t1.name != NULL)//释放t1.name和t2.name的堆区空间
{
free(t1.name);
t1.name = NULL;
}
if (t2.name != NULL)
{
free(t2.name);
t2.name = NULL;
}
return 0;
}
深拷贝与浅拷贝在C语言中意义不大,只是做一个简单的分析。