如果一个结构不含指针,那么它的深拷贝和浅拷贝都是 一样的但是如果结构体含的有指针,拷贝时就需要对那个指针变量进行另外的开辟空间,不能直接使用=号来赋值,否则这个指针变量会指向同一块内存,那么当一个指针释放的时候,另一个指针也跟着释放了.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct Teacher
{
char *name;
int age;
}Teacher;
//结构体中嵌套指针,而且动态分配空间
//同类型结构体变量赋值
//不同结构体成员指针变量指向同一块内存
int main(void)
{
Teacher t1;
t1.name = (char *)malloc(30);
strcpy(t1.name, "zhangsan");
t1.age = 22;
Teacher t2;
t2 = t1;//直接进行浅拷贝
//深拷贝,人为增加内容,重新拷贝一下,需要开辟空间
t2.name = (char *)malloc(30);
strcpy(t2.name, t1.name);
printf("[t2]%s, %d\n", t2.name, t2.age);
if (t1.name != NULL)
{
free(t1.name);
t1.name = NULL;
}
//如果是浅拷贝 此处就不能再次释放资源 否则出错
if (t2.name != NULL)
{
free(t2.name);
t2.name = NULL;
}
printf("\n");
system("pause");
return 0;
}
总的来说就是:结构体含有指针需要深拷贝,不含直接可以直接使用=号赋值.